#include <stdio.h>
#include <stdlib.h>
int main() {
float n;
scanf("%f", &n);
printf("%.3f", n);
}
输入:51444.325061
我的输出:51444.324
预期输出:51444.325
为什么我没有得到正确的答案?
最佳答案
32 位float
可以编码大约 232 个不同的值。
51444.325061
不是其中之一**。相反,最接近的float
正是 51444.32421875。下一个最佳选择是 51444.328125。
将 51444.32421875 打印到小数点后 3 位最好为“51444.324”。
why does I dont get the proper answer?
float
太不精确,无法按照 OP 的要求对 51444.325061 进行编码。使用 double 会有帮助。同样的问题也存在,但仅在需要 16 位以上有效数字时才会出现。
** 可编码的有限值的形式为:some_integer * 2some_exponent。
关于c - 为什么数字 51444.325061 不四舍五入到 51444.325 到小数点后 3 位?我想在c编程中四舍五入这个数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68348344/