我试图在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做到这一点?我是语言环境的新手,对他们没什么经验。或者只是一种更简单的方法来完成我的工作?