具有固定精度且没有尾随零的双字符串转换

时间:2018-05-09 09:01:24

标签: c++ string

我必须使用点后面的指定位数将double值转换为string。但是我必须避免打印尾随零,所以如果doubleValue95,我希望看到"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并不是必须的,但是因为我已经在我的项目中使用它,所以它会派上用场。

1 个答案:

答案 0 :(得分:0)

考虑到尝试使用十进制格式表示二进制浮点类型的所有问题,如果我是你,我采用以下方案:

  1. 使用您喜欢的格式化程序生成double的字符串表示形式,四舍五入到DBL_DIG - 1有效数字(让格式化程序执行此操作,而不是以数字方式舍入double

  2. 自己修剪小数分隔符后的任何多余的0

  3. 您可能会发现这很难相信,但您的要求相当特殊。

相关问题