2

我正在尝试在 C++ 中将双精度数转换为字符串。考虑到机器 epsilon,我想使用一定数量的有效数字对其进行格式化。

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

4 -> “4.00”

4.4 -> “4.40”

4.56434444 -> “4.56434444”

理想情况下,我希望为流注入语言环境和 numpunct 方面

我目前正在使用类似的东西

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 的结果。这里的基本思想是得到 floor(num * 100),从 (num * 100) 中减去它。如果差异不为零,则我使用高于 2 的精度。

因为我的最小有效数字是 2 我不想放慢算法来接受可变数量。

有没有办法用 numpunct 方面做到这一点?我是语言环境的新手,对它们几乎没有经验。或者只是一种更简单的方法来完成我所拥有的?

4

0 回答 0