gpt4 book ai didi

c++ - 如何在 C++ 中优雅地格式化字符串,使其四舍五入到小数点后 6 位,并修剪掉额外的 '0' 或 '9'

转载 作者:太空狗 更新时间:2023-10-29 23:26:09 24 4
gpt4 key购买 nike

如何编写一个函数来格式化带有小数位的字符串,而没有尾随 0 或不必要的 9?鉴于 decimals 为 2,这是我的预期:

0.999 -> 1.0
0.99 -> 0.99
1.01 -> 1.01
1.001 -> 1.0
123 -> 123.0
0 -> 0.0
0.1 -> 0.1

(如你所料的负面)

这是我目前所拥有的,但它是非常难看的代码。有没有更好的方法来做到这一点?

string toStrMaxDecimals(double value, uint decimals) {
value *= pow(10, decimals);
value = round(value);
value *= pow(0.1, decimals);
string temp = boost::lexical_cast<string>(value);
size_t dot = temp.find('.');
if (dot != string::npos) {
if (temp.size() > dot + decimals + 1)
temp.erase(dot + decimals + 1);
if (*temp.rbegin() == '0')
temp.erase(temp.find_last_not_of("0") + 1);
if (*temp.rbegin() == '.')
temp.append("0");
} else {
temp.append(".0");
}
return temp;
}

最佳答案

std::string toStrMaxDecimals(double value, int decimals)
{
std::ostringstream ss;
ss << std::fixed << std::setprecision(decimals) << value;
std::string s = ss.str();
if(decimals > 0 && s[s.find_last_not_of('0')] == '.') {
s.erase(s.size() - decimals + 1);
}
return s;
}

关于c++ - 如何在 C++ 中优雅地格式化字符串,使其四舍五入到小数点后 6 位,并修剪掉额外的 '0' 或 '9',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/900326/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com