- 論壇徽章:
- 0
|
業(yè)務代碼里有這么一段代碼
int sample(double a)
{
...
int x;
x = a * 100;
...
}
發(fā)現(xiàn)在a = 37.30或者10.20的時候x得不到想要的值。x的結果會變成3729和1029
寫了個測試代碼如下:- #include <stdio.h>
- int main()
- {
- double test = 37.30;
- double test2 = 10.20;
-
- int i = 100;
- for(; i < 1000000; i*=10) {
- printf("%.2f * %d = %d\n", test, i, (int)(test * i));
- printf("%.2f * %d = %d\n", test2, i, (int)(test2 * i));
- }
- return 0;
- }
復制代碼 輸出如下:
/home/xlc/DemoCode> ./floattest
37.30 * 100 = 3729
10.20 * 100 = 1019
37.30 * 1000 = 37300
10.20 * 1000 = 10200
37.30 * 10000 = 373000
10.20 * 10000 = 102000
37.30 * 100000 = 3729999
10.20 * 100000 = 1019999
在win7 64bit vs2013 下面和gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-54)都得到相同的結果
我知道浮點數(shù)不會精確表示。但是為何偏偏是這兩個數(shù)出問題?
各位有遇到過沒?
PS:目前我想是先改成 x = (int)(a * 1000) / 10;
|
|