如何确定浮点值中小数点后的位数?

时间:2010-02-19 19:45:38

标签: c++ floating-point decimal

在C ++中,您可以使用std :: numeric_limits< FloatingPointType> :: digits10来确切地知道在小数位之前可以获得多少精度位置。如果我知道数字总是在0到1之间(包括0和1),我怎么知道我可以得到多少小数位?

编辑:我问的原因是我有一个外部RNG产生双打,并使用标准输入和输出将它们连接到第二个程序,所以如果随机生成的数字没有正确输出到标准输出,第二个程序无法通过标准输入获取其全部值,因为它们被第一个程序的输出截断,然后由第二个程序舍入为可表示的值。我想完整地保存程序之间的值。 感谢

5 个答案:

答案 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>