gpt4 book ai didi

c++ - std::stringstream 的小数点?

转载 作者:IT老高 更新时间:2023-10-28 12:56:14 28 4
gpt4 key购买 nike

我有一堆整数放入 stringstream 中。现在我想将 stringstreams 更改为 strings,同时保持 strings 的恒定精度。我该怎么做?我知道我可以使用 stringstreams.precision(),但由于某种原因它不起作用:

float a = 5.23;
float b = 3.134;
float c = 3.0;

std::stringstream ta;
std::stringstream tb;
std::stringstream tc;

ta << a;
tb << b;
tc << c;

ta.precision(2);
tb.precision(2);
tc.precision(2);

std::string out = "";
out += ta.str() + "\n";
out += tb.str() + "\n";
out += tc.str() + "\n";

将返回 5.23\n3.134\n3.0,而不是 5.23\n3.13\n3.00

最佳答案

我认为您的问题是 precision() 设置在未来流插入操作中使用的精度,而不是在生成要呈现的最终字符串时。也就是写

ta << a;
tb << b;
tc << c;

ta.precision(2);
tb.precision(2);
tc.precision(2);

您设置 precision 太晚了,因为前三行已经使用默认精度将 float 转换为字符串。

要解决此问题,请尝试将执行这些语句的顺序更改为

ta.precision(2);
tb.precision(2);
tc.precision(2);

ta << a;
tb << b;
tc << c;

这将导致写入 stringstream 使用您的自定义精度,而不是现有的默认值。

但是,precision 修饰符的效果只有在您明确告诉流您要使用固定精度或科学记数法进行输出时才有意义。为此,您可以使用 fixedscientific 修饰符:

ta.precision(2);
tb.precision(2);
tc.precision(2);

ta << fixed << a;
tb << fixed << b;
tc << fixed << c;

这将正确显示适当的位数。

在相关说明中,您不需要使用三个 stringstream 来实现您的目标。你可以只用一个:

std::stringstream t;
t.precision(2);

t << fixed << a << '\n' << b << '\n' << c << '\n';

std::string out = t.str();

关于c++ - std::stringstream 的小数点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5113221/

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