我不明白为什么当我尝试将我的 double 转换为逗号四舍五入后的 int 值时..
void print_float(double nb)
{
int negative;
int intpart;
double decpart = -10.754;
int v;
negative = (nb < 0.0f);
intpart = (int)nb;
decpart = nb - intpart;
v = (int)(decpart * 1000);
if (negative) {
v *= -1;
}
printf("%i.%i", intpart, v); // output: -10.753
}
我以为担心来自类型转换,但我不明白这个问题..
最佳答案
double
无法准确编码所有数字。它可以精确编码大约 264 个不同的值。 -10.754
不是其中之一。取而代之的是,使用的附近值比预期的要少。
printf("%.24f", -10.754);
// -10.753999999999999559463504
decpart * 1000
部分引入了一些不精确,但乘积仍低于 754.0,然后 (int)
转换为 753。
关于将 double 转换为 int 而不四舍五入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54219110/