gpt4 book ai didi

c++ - 双格式和字符串流格式

转载 作者:可可西里 更新时间:2023-11-01 16:25:58 27 4
gpt4 key购买 nike

double val = 0.1;
std::stringstream ss;
ss << val;
std::string strVal= ss.str();

在 Visual Studio 调试器中,val 的值为 0.10000000000000001(因为无法表示 0.1)。val使用stringstream转换时,strVal等于"0.1"。然而,当使用 boost::lexical_cast 时,生成的 strVal"0.10000000000000001"

另一个例子如下:

double val = 12.12305000012;

在 visual studio 下 val 显示为 12.123050000119999,使用 stringstream 和默认精度 (6) 它变为 12.1231。我真的不明白为什么它不是 12.12305(...)。

是否有默认精度,或者 stringstream 是否有特定的算法来转换不能精确表示的 double 值?

谢谢。

最佳答案

您可以按如下方式更改 stringstream 的浮点精度:

double num = 2.25149;
std::stringstream ss(stringstream::in | stringstream::out);
ss << std::setprecision(5) << num << endl;
ss << std::setprecision(4) << num << endl;

输出:

2.2515
2.251

请注意数字在适当时也是如何四舍五入的。

关于c++ - 双格式和字符串流格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12894824/

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