gpt4 book ai didi

c++ - 如何避免科学记数法而显示完整数字?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:14:50 34 4
gpt4 key购买 nike

我在其中一个库中有一段下面的代码,它导致一些数字以科学记数法的形式显示。

T value = 0;

template<typename U> void process(U& buf, DataOption holder) const {
if (holder == DataOption::TYPES) {
switch (type_) {
case teck::PROC_INT:
buf << "{\"int\":" << value << "}";
break;
case teck::PROC_LONG:
buf << "{\"long\":" << value << "}";
break;
case teck::PROC_FLOAT:
buf << "{\"float\":" << value << "}";
break;
case teck::PROC_DOUBLE:
buf << "{\"double\":" << value << "}";
break;
default:
buf << "{\"" << type_ << "\":" << value << "}";
}
}
}

对于上述一些不同的情况,“值(value)”是以科学计数法出现的。我怎样才能避免显示科学记数法,而是显示完整的数字?我做了一些研究,我可以使用“std::fixed”,但我应该在哪里使用它?

最佳答案

std::fixed 在同一个流中工作,因此如果您正在使用无状态流,这将不起作用

case teck::PROC_DOUBLE:
buf << std::fixed;
buf << "{\"double\":" << value << "}";

应该是这样的

case teck::PROC_DOUBLE:
buf << "{\"double\":" << std::fixed << value << "}";

所以你的函数可以像这样简化也是为了更好的可读性

template<typename U> void process(U& buf, DataOption holder) const
{
if (holder == DataOption::TYPES)
{
buf << "{\"";

switch (type_)
{
case teck::PROC_INT: buf << "int"; break;
case teck::PROC_LONG: buf << "long"; break;
case teck::PROC_FLOAT: buf << "float"; break;
case teck::PROC_DOUBLE: buf << "double"; break;
default: buf << type_;
}

buf << "\":" << std::fixed << value << "}";
}
}

关于c++ - 如何避免科学记数法而显示完整数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35165024/

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