为什么浮点数在C中四舍五入,而不是在JavaScript或Python中?
起初,我知道为什么浮点数在C中四舍五入,而不是在JavaScript或Python中?,c,C,起初,我知道IEEE754标准下的浮点数对于十进制数来说是不准确的,我在JavaScript和Python中尝试了0.3-0.2,它们得到了相同的0.0999999998,但当我在C中尝试以下代码时,我得到了0.1: float a = 0.3, b = 0.2, c = b - a; printf("%f", c); printf函数是否将值四舍五入?如果我想用C打印不准确的十进制数字,我应该怎么做?您可以使用以下方法: printf("%0.3f", c) 这里没有太多详细说明为什么与J
IEEE754
标准下的浮点数对于十进制数来说是不准确的,我在JavaScript和Python中尝试了0.3-0.2
,它们得到了相同的0.0999999998
,但当我在C中尝试以下代码时,我得到了0.1
:
float a = 0.3, b = 0.2, c = b - a;
printf("%f", c);
printf
函数是否将值四舍五入?如果我想用C打印不准确的十进制数字,我应该怎么做?您可以使用以下方法:
printf("%0.3f", c)
这里没有太多详细说明为什么与JavaScript或Python不同。只是一些C的细节
在C语言中,
“%f”
的默认精度是
后面的6位小数
如果我想用C打印不准确的十进制数字,我应该怎么做
只能打印这么多有效数字
他们是不同的语言。。。他们不必有相同的行为
double
。之后,取决于每个人如何处理舍入等。默认情况下,%f
打印6位小数(和舍入)。您的数字最好表示为0.100000
,所以打印出来的就是这个数字。如果您想看到9的辉煌,请在以下格式中请求更多的小数位:%.10f
。有趣的是,我使用您的格式字符串和较长的格式字符串打印得到的结果是-0.100000-0.100000089
。为什么代码会执行b-a
或0.2-0.3
来显示“我尝试了0.3-0.2”?符号不同。你试过了吗?是的,我用过它,你可以根据需要通过调整值来改变精度,这样打印出0.09999998?请看链接,我有c代码,还有一件事,由于你减去了02,结果将是负数。-03,请参阅此链接:code.hackerearth.com在线编译器中的代码显示%f
的结果,并使用c=a-b
。那很好;结果是0.100000
。你的代码将产生0.100
(给出或接受符号,我不在乎)。问题是“我怎样才能用C语言获取0.09999998
”(符号仍然不重要),而您的回答并没有有效地解决这个问题。有几个层次的问题。(1) 您没有打印十几个小数位;(2) 至少在运行macOS Sierra 10.12.3并使用GCC 6.3.0的Mac上,差异显示为略高于0.1,而不是略低于0.1。
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
#include <float.h>
...
printf("%.*e\n", FLT_DIG - 1, c);
// -1.00000e-01
printf("%a\n", c);
// -0x1.99999cp-4