我必须使用点后面的指定位数将double
值转换为string
。但是我必须避免打印尾随零,所以如果doubleValue
是95
,我希望看到"95"
而不是"95.000000..."
,同样,如果值为{{1}我希望看到95.5
而不是"95.5"
。
这是我当前的代码,使用"95.500000..."
:
boost::format
然而,它没有处理我提到的两个特殊情况(不打印尾随零,并且在int的情况下没有点)。
我想我可以从字符串中删除所有尾随零,最后删除尾随点(如果有的话)。
但我问是否有更聪明的方法可以做到。
这就是我所做的:
double doubleValue = ...;
std::string fmt = (boost::format("%%.%df") % opts.floatPrecision).str();
return (boost::format(fmt) % doubleValue).str();
注意:使用boost并不是必须的,但是因为我已经在我的项目中使用它,所以它会派上用场。
答案 0 :(得分:0)
考虑到尝试使用十进制格式表示二进制浮点类型的所有问题,如果我是你,我采用以下方案:
使用您喜欢的格式化程序生成double
的字符串表示形式,四舍五入到DBL_DIG - 1
有效数字(让格式化程序执行此操作,而不是以数字方式舍入double
)
自己修剪小数分隔符后的任何多余的0
。
您可能会发现这很难相信,但您的要求相当特殊。