gpt4 book ai didi

c++ - 使用字符串流时如何停止 double 转换为科学计数法

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

我正在创建一个函数来返回小数位数和整数位数,并使用 sstream 将插入的 typename 数字转换为字符串。

然而,当转换为字符串时,数字以科学计数法出现,这对于计算正常数字中的位数没有用。我怎样才能阻止这种情况发生在我下面的函数中?

enum { DECIMALS = 10, WHOLE_NUMBS = 20, ALL = 30 };

template < typename T > int Numbs_Digits(T numb, int scope)
{
stringstream ss(stringstream::in | stringstream::out);
stringstream ss2(stringstream::in | stringstream::out);
unsigned long int length = 0;
unsigned long int numb_wholes;

ss2 << (int) numb;
numb_wholes = ss2.str().length();
ss2.flush();
bool all = false;

switch (scope) {
case ALL:
all = true;

case DECIMALS:
ss << numb;
length += ss.str().length() - (numb_wholes + 1); // +1 for the "."
if (all != true)
break;

case WHOLE_NUMBS:
length += numb_wholes;
if (all != true)
break;

default:
break;
}
return length;
}

最佳答案

使用std::fixed流操纵器为:

ss << fixed << numb;

--

例子,

#include <iostream>
using namespace std;

int main () {
double a,b,c;
a = 3.1415926534;
b = 2006.0;
c = 1.0e-10;
cout.precision(5);
cout << a << '\t' << b << '\t' << c << endl;
cout << fixed << a << '\t' << b << '\t' << c << endl;
cout << scientific << a << '\t' << b << '\t' << c << endl;
return 0;
}

输出:

3.1416          2006            1e-010
3.14159 2006.00000 0.00000
3.14159e+000 2.00600e+003 1.00000e-010

例子取自here .

您可以使用 std::stringstream 代替 cout,但结果是一样的。在这里进行实验:

http://www.ideone.com/HUrRw

关于c++ - 使用字符串流时如何停止 double 转换为科学计数法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6010838/

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