为什么数字 51444.325061 不四舍五入到 51444.325 最多 3 位小数?我想在 c 编程中四舍五入这个数字
why does the number 51444.325061 doesnot round off to 51444.325 upto 3 decimal places? I want to round off this number in c programming
#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.
在内部,浮点数并不像您所期望的那样表示为小数。相反,他们使用基于 binary (base-2) 数字的浮点表示。
因为它们是以 2 为底,所以这些浮点数不能精确表示小数。
以下是可用的 float
最接近 51444.325061 的值,以及它们的精确十进制等值:
0x4748f452 51444.32031250 0.784978032112121582031250 × 2^16
0x4748f453 51444.32421875 0.784978091716766357421875 × 2^16
0x4748f454 51444.32812500 0.784978151321411132812500 × 2^16
0x4748f455 51444.33203125 0.784978210926055908203125 × 2^16
因此您可以在 51444.324 或 51444.328 之间选择。但显然51444.324更接近
#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.
在内部,浮点数并不像您所期望的那样表示为小数。相反,他们使用基于 binary (base-2) 数字的浮点表示。
因为它们是以 2 为底,所以这些浮点数不能精确表示小数。
以下是可用的 float
最接近 51444.325061 的值,以及它们的精确十进制等值:
0x4748f452 51444.32031250 0.784978032112121582031250 × 2^16
0x4748f453 51444.32421875 0.784978091716766357421875 × 2^16
0x4748f454 51444.32812500 0.784978151321411132812500 × 2^16
0x4748f455 51444.33203125 0.784978210926055908203125 × 2^16
因此您可以在 51444.324 或 51444.328 之间选择。但显然51444.324更接近