首先,我知道IEEE754
标准下的浮点数对于十进制数是不准确的,我在JavaScript和Python中尝试0.3 - 0.2
并且他们得到相同的0.09999999998
,但我当我在C中尝试以下代码时得到0.1
float a = 0.3, b = 0.2, c = b - a;
printf("%f", c);
printf
函数是否舍入了值?如果我想在C中打印十进制的不准确数字,我该怎么办?
答案 0 :(得分:0)
你可以这样做:
printf("%0.3f", c)
答案 1 :(得分:0)
这里没有详细说明为什么与JavaScript或Python的区别。只是一些C细节。
在C中,"%f"
的默认精度是.
之后的6位小数。 @Jonathan Leffler
int main(void) {
float a = 0.3, b = 0.2, c = b - a;
printf("%f\n", c);
// -0.100000
// To show to 11 places, use, "%.11f".
printf("%.11f\n", c);
// -0.10000000894
如果我想在C中打印十进制的不准确数字,我该怎么办?
仅打印多个重要位数。
#include <float.h>
...
printf("%.*e\n", FLT_DIG - 1, c);
// -1.00000e-01
C详情:
变量c
不准确,其值很准确,可能是-0.10000000894069671630859375
。这是先前的操作,例如将0.3
转换为float
和减法是不准确的。
c
的打印指示printf()
将舍入值打印为6,11或指定的任何位数。 printf()
可以在{em>至少打印正确的文字,最多DBL_DIG
(例如15)float/double
的有效总数。
要打印典型的浮点值正好,请使用%a
(十六进制)
printf("%a\n", c);
// -0x1.99999cp-4