将double转换为带有效数字的字符串的最佳方法(考虑机器epsilon)

时间:2012-07-30 04:24:07

标签: c++ boost

我试图在c ++中将double转换为字符串。我想使用一定的最小有效位数格式化它,并考虑机器epsilon。

作为2个最小有效小数的示例:

4 - >为 “4.00”

4.4 - > “4.40”

4.56434444 - > “4.56434444”

我理想情况下想要使用语言环境和numpunct facet填充流

我目前正在使用类似

的内容
if(abs(floor((m_mes * 100) + 0.5) - (m_mes * 100)) > (std::numeric_limits<double>::epsilon() * 10000))
    buffer << fixed << m_mes;
else
    buffer << fixed << setprecision(2) << m_mes;

修改 绝对值和舍入是补偿epsilon的结果。这里的基本思路是获取楼层(num * 100),从(num * 100)中减去它。如果差异不为零,那么我使用高于2的精度。

因为我的最小有效数字为2,所以我不想让算法减速以接受可变数量。

有没有办法用numpunct facet做到这一点?我是语言环境的新手,对他们没什么经验。或者只是一种更简单的方法来完成我的工作?

0 个答案:

没有答案