c - 为什么数字 51444.325061 不四舍五入到 51444.325 到小数点后 3 位?我想在c编程中四舍五入这个数字

标签 c floating-point decimal rounding precision

#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/

相关文章:

c - c、fclose()、remove()、rename() 中的奇怪行为

assembly - 将 IEEE 浮点十六进制转换为十进制?

java - Java和Javascript计算结果的差异

python - Pandas 读取具有浮点值的 csv 文件导致奇怪的舍入和小数位

c - C中的符号常量和宏有什么区别?

c++ - 将 GtkLabel 相对于 GtkDrawingArea 对齐

c - 为什么 x[2] 也重新分配 y 值?我该如何解决这个问题

python - python错误中的小数对象

c# - 将 float 转换为十进制,为什么需要显式转换?

python 3 : How can I add decimals that are inside a string