我在其中一个库中有一个以下代码,导致某些数字以科学记数法的形式显示。
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 << "}";
}
}
}
对于上述一些不同的案例,“价值”正在以科学记数法出现。我怎样才能避免显示科学记数而是显示完整数字?我做了一些研究,我可以使用“std :: fixed”但我应该在哪里使用它?
答案 0 :(得分:1)
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 << "}";
}
}
答案 1 :(得分:0)