私はこの質問は、私が文字列にダブルキャスティングに関する以前の質問へのフォローアップだと思います。ラウンドダブルと文字列にキャスト
私には、数字を表す文字列が与えられたAPIがあります。この数値を精度の小数点以下2桁に丸めて文字列として返す必要があります。私の試みは次のとおりです:
void formatPercentCommon(std::string& percent, const std::string& value, Config& config)
{
double number = boost::lexical_cast<double>(value);
if (config.total == 0)
{
std::ostringstream err;
err << "Cannot calculate percent from zero total.";
throw std::runtime_error(err.str());
}
number = (number/config.total)*100;
// Format the string to only return 2 decimals of precision
number = floor(number*100 + .5)/100;
percent = boost::lexical_cast<std::string>(number);
return;
}
残念ながら、キャストは「丸められていない」値をキャプチャします。 (つまり、数値= 30.63、パーセント= 30.629999999999)誰もが自然に何を望むかを得るために、ダブルを丸めて文字列にキャストするクリーンな方法を提案する人はいますか?
ご協力いただきありがとうございます。 :)
多くの感謝!私は本当にsnprintf()を使って一時的な文字配列とフォーマットを作ることに頼る必要はありませんでした。 :) – Rico