转自:http://blog.renren.com/blog/315991004/876120504

以下语言环境为g++

猜猜看这些代码的输出结果?

printf("%0.1lf\n", 0.05);

printf("%0.1lf\n", 0.25);

printf("%0.1lf\n", 0.75);

printf("%0.2lf\n", 0.025);

printf("%0.2lf\n", 0.015);

printf("%0.2lf\n", 0.125);

有人可能会说了这不是很简单的么。。。四舍五入啊。。。

但是实际上。。。

答案分别是:

0.1

0.2

0.8

0.03

0.01

0.12

C++的输出不是四舍五入,是所谓的“四舍六入五留双”!。

也就是对于5,是看5的前面一位,如果是奇数就进位,偶数就退位。

那为什么第一行会是0.1?

 仔细看一下0.05

printf("%0.20lf\n", 0.05);

输出是0.05000000000000000278

再看看0.015。。。。 

printf("%0.20lf\n", 0.015);

0.01499999999999999944

这是因为电脑是用2进制存数的,而0.05不是纯2进制小数,所以会有误差,而C++的转化方式中是误差是不确定的,从而造成了四舍五入的错觉。

相关文章:

  • 2021-09-15
  • 2021-10-26
  • 2021-12-28
  • 2022-12-23
  • 2022-12-23
  • 2021-12-29
  • 2021-08-08
  • 2021-09-08
猜你喜欢
  • 2022-02-10
  • 2021-07-08
  • 2022-02-07
  • 2022-12-23
  • 2021-08-18
  • 2022-01-01
  • 2022-12-23
相关资源
相似解决方案