我有以下测试用例
#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;
}
Run Code Online (Sandbox Code Playgroud)
输出是:
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
Run Code Online (Sandbox Code Playgroud)
在我看来,乘以100并除以100将相互抵消?但它实际上降低了精度.这是如何工作的?
在某些地方你正在施展为"长",它是一个整数类型.因此,例如在最后一种情况下,您将3.987乘以10,得到39.87.然后,你将它投射到"长"所以它变成了39.将它除以10后你得到3.9.
你想用(long)什么来实现?