C ++ Precision的问题

时间:2013-10-12 02:54:55

标签: c++

我看了很多帖子,谈到我们如何在C ++中显示具有给定精度的数字,但我想知道是否有办法显示非重复数字,如x.0和指定宽度的重复数字通过setprecision方法?

2 个答案:

答案 0 :(得分:3)

如果您事先知道要打印的数字是否显示重复的十进制扩展,那么您可以简单地发出一条声明:

if is_recurring:
    print using expanded format
else
    print using fixed format

我想你事先不知道。一般而言,计算机也不能知道它。

如何测试几个小数(如果使用双精度,大约为15)是否代表重复的小数?

此外,您想如何打印它?例如,以经典的例子为例:

3227 / 555 = 5.814414414414414

我该如何打印?喜欢这个?

5.8144

还是那样?

5.8144
   ***

一般来说,这似乎是一个非常难以解决的问题。

答案 1 :(得分:1)

听起来你真正想要的是修剪尾随零。机器不知道一个数字是否真的是一个“反复出现的数字”,这只是一个有理数的奇特名称,其分母是数字基数的相对素数,因为浮点数学不是基于有理数。

正如Adam所提到的,默认输出样式已经省略了尾随零。这跟数学没什么关系;它只是删除字符串末尾的字符。

就标准而言,ios_base::fixedios_base::scientific标志决定了定性格式。如果两者都未设置,则输出等同于%g的{​​{1}}格式说明符。

根据printf

  

从结果的小数部分删除尾随零;只有在后跟至少一位数字时才会出现小数点。

尽管有上述规则,要在最后获得man printf,你必须做一些事情,比如打印到临时字符串,搜索小数点,然后在.0模式下重试找到。