[英]double to string conversion with fixed precision and no trailing zeros
我必須通過在點后使用指定的位數將double
值轉換為string
。 但是,我必須避免打印尾隨零,因此,如果doubleValue
為95
,我希望看到的是"95"
而不是"95.000000..."
,同樣,如果值是95.5
,我希望看到的是"95.5"
而不是"95.500000..."
。
這是我當前的代碼,使用boost::format
:
double doubleValue = ...;
std::string fmt = (boost::format("%%.%df") % opts.floatPrecision).str();
return (boost::format(fmt) % doubleValue).str();
但是,它不能處理我提到的兩種特殊情況(不打印尾隨零,在int情況下不打印點)。
我想我可以從字符串中刪除所有結尾的零,最后刪除結尾的點(如果有)。
但是我問是否有更聰明的方法可以做到這一點。
這是我所做的:
std::string fmt = (boost::format("%%.%df") % opts.floatPrecision).str();
std::string s = (boost::format(fmt) % doubleValue).str();
int len = s.length();
while(s[len - 1] == '0') len--;
if(s[len - 1] == '.') len--;
return s.substr(0, len);
注意:使用boost不是強制性的,但是由於我已經在項目中使用了boost,因此它很方便。
考慮到嘗試使用十進制格式表示二進制浮點類型的所有問題,如果您是我,我將采用以下方案:
使用您喜歡的格式出示你的字符串表示double
,四舍五入到DBL_DIG - 1
顯著數字(讓格式化做到這一點,而不是四舍五入的double
數字)。
自己在小數點分隔符后修剪多余的0
。
您可能會發現這難以置信,但是您的要求相當特殊。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.