为什么浮点数在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打印不准确的十进制数字,我应该怎么做

只能打印这么多有效数字


他们是不同的语言。。。他们不必有相同的行为float可能与Javascript或Python中的精度不同。。。对于初学者,请尝试使用
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