2017-08-23 8 views
0

double elementを文字列で指定してprecisionに変換したいと考えています。私は不要な0を私の文字列に入れないようにしたいので(std::fixedを使うことはできません)。また、私は常に "。"私の弦で。stringstreamに浮動小数点値を書き込み、 "。"小数点がない場合でも

だから私は次の関数を書いた:

std::string toString(double element, int precision) 
{ 
    std::stringstream stream; 

    stream << std::setprecision(precision) << element; 
    return stream.str(); 
} 

toString(1.25, 2) --> "1.25" OK 
toString(1.25, 17) --> "1.25" OK 

しかし、今、私はtoString(1., 2)を行う想像し、それは私に"1"を返しますが、私は「.」を維持したいので、私は"1."

をしたいです

これを行う有効な方法はありますか?

PS:私はC++ 11ではありません。

私の質問をお読みいただきありがとうございます。

+0

'.'の文字列を検索していない場合は、末尾に追加してください。 – user463035818

答えて

1

末尾に '。'を付けるにはいずれの場合も、後続のゼロを取得せずに、自分で行う必要があります。しかし、 '。'とにかくあなたがストリームを持っているので、それはかなり単純です(ストリームのみで作業したい場合はより難しくなります)ので、std::stringに変更してください。

これらをサポートする必要がある場合は、ロケール固有の問題(例: '。'と '、'の使用方法が異なる)にも注意してください。

std::stringstream ss; 
ss << std::setprecision(precision) << element; 
std::string str = stream.str(); 
if (str.find('.') == std::string::npos) 
    str.push_back('.'); 
return str; 

また、末尾のゼロを削除することもできます。

+0

ありがとうございます。ご返信ありがとうございます。最後に、私はそのようなものを考え出し、時間を有効に使うことを望んで[modf](http://www.cplusplus.com/reference/cmath/modf/)を使いました – cschaller

関連する問題