在C ++中,您可以使用std :: numeric_limits< FloatingPointType> :: digits10来确切地知道在小数位之前可以获得多少精度位置。如果我知道数字总是在0到1之间(包括0和1),我怎么知道我可以得到多少小数位?
编辑:我问的原因是我有一个外部RNG产生双打,并使用标准输入和输出将它们连接到第二个程序,所以如果随机生成的数字没有正确输出到标准输出,第二个程序无法通过标准输入获取其全部值,因为它们被第一个程序的输出截断,然后由第二个程序舍入为可表示的值。我想完整地保存程序之间的值。 感谢
答案 0 :(得分:4)
std::numeric_limits<...>::digits
给出了您可以拥有的最大有效位数。对于IEEE浮点数和双精度数,这通常分别为24和53.
答案 1 :(得分:4)
std::numeric_limits<FloatingPointType>::digits10
是类型可以精确表示的总小数位数。如果你写一个数字为1234.56或1.23456⋅10 3 或123456⋅10 -2 对于精确位数无关紧要,所以之前没有区别小数点后。
答案 2 :(得分:0)
C ++标准不保证任何东西。 如果必须严格控制小数点后的位数,则必须编写自己的代码(例如固定格式输出)。 最终,它取决于您使用的编译器。 如果你需要控制小数位数,你可以通过使用C和printf的格式化控件来获得更好的运气。
答案 3 :(得分:0)
如果你总是需要一定数量的数字,建议你去研究一下。例如format library或数字conversion library。如果您还没有,您还应该阅读关于浮点数的Goldberg article
答案 4 :(得分:-1)
您可以使用setprecision(n);
,其中n是小数点后的位数。
例如,如果我想在输出中输入15位小数:
cout<< setprecision(15);
注意:不要忘记包含头文件以使用此功能:
#include<iomanip>