- 论坛徽章:
- 0
|
业务代码里有这么一段代码
int sample(double a)
{
...
int x;
x = a * 100;
...
}
发现在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)都得到相同的结果
我知道浮点数不会精确表示。但是为何偏偏是这两个数出问题?
各位有遇到过没?
PS:目前我想是先改成 x = (int)(a * 1000) / 10;
|
|