我正在尝试在 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 方面做到这一点?我是语言环境的新手,对它们几乎没有经验。或者只是一种更简单的方法来完成我所拥有的?