数字的精确度,乘以除以100

时间:2013-10-13 20:49:24

标签: c currency

我有以下测试用例

#include <stdio.h>

int main() { 

    double x = 3.987;

    printf("x = %lf\n", x);

    printf("(double) (long) (x) = %lf\n", (double) (long) (x));

    printf("(x*100)/100 = %lf\n", (x*100)/100);

    printf("(double) (long) (x*100)/100 = %lf\n", (double) (long) (x*100)/100);

    printf("(double) (long) (x*10)/10 = %lf\n", (double) (long) (x*10)/10);

    return 0;
}

输出结果为:

x = 3.987000
(double) (long) (x) = 3.000000
(x*100)/100 = 3.987000
(double) (long) (x*100)/100 = 3.980000
(double) (long) (x*10)/10 = 3.900000

在我看来,乘以100并除以100会相互抵消?但它实际上降低了精度。这是如何工作的?

2 个答案:

答案 0 :(得分:5)

在某些地方,你正在施展为“长”,而是整数类型。因此,例如在最后一种情况下,您将3.987乘以10,得到39.87。然后,你将它投射到“长”所以它变为39.将它除以10后得到3.9。

您希望使用(long)

来实现什么目标?

答案 1 :(得分:0)

类型转换为long的优先级高于除以100.

(double) (long) (x*100)/100

实际上相当于

((double) (long) (x*100)) / 100

不要

(double) (long) ((x*100)/100)