我看了很多帖子,谈到我们如何在C ++中显示具有给定精度的数字,但我想知道是否有办法显示非重复数字,如x.0和指定宽度的重复数字通过setprecision方法?
答案 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::fixed
和ios_base::scientific
标志决定了定性格式。如果两者都未设置,则输出等同于%g
的{{1}}格式说明符。
根据printf
,
从结果的小数部分删除尾随零;只有在后跟至少一位数字时才会出现小数点。
尽管有上述规则,要在最后获得man printf
,你必须做一些事情,比如打印到临时字符串,搜索小数点,然后在.0
模式下重试找到。