C ++字符串加倍转换失败精度?

时间:2011-01-24 04:51:25

标签: c++

C ++不是我的语言,所以请原谅这个简单的问题。我失去了从字符串到双倍的转换精度,任何人都可以帮忙吗?

string lAmount;

string lSuspendedInt = "131663.51";
string lAccruedInterest = "0.0";
double dSuspendedInt= atof(lSuspendedInt.c_str());   //PROBLEM HERE?
double dAccruedInterest = atof(lAccruedInterest.c_str());
double dTotal = dSuspendedInt + dAccruedInterest;

char cAmount[50];

memset(cAmount,0X00,sizeof(cAmount));
  sprintf(cAmount,"%g*",dTotal);
  lAmount = cAmount;


cout << "lAmount: "<<lAmount<<endl; //PRINTING: 131664 not 131663.51

我在memset函数中使用%f但是这给出了131663.510000

提前致谢。

Sapatos

3 个答案:

答案 0 :(得分:3)

问题是你的%g格式运算符,它没有以足够的精度指定。您可能需要%.2f代替,它会在小数点后打印两位数。

答案 1 :(得分:2)

sprintf %g格式说明符默认为打印六位有效数字。如果您需要更多,可以明确指定应打印的数量:

sprintf(cAmount,"%.8g*",dTotal);

答案 2 :(得分:1)

函数atof创建一个double。见here。你的问题是%g返回浮点数或科学记数法中较短的一个。见here。另请注意,您要添加in *表示法,表示打印字符数预计会被截断。

相关问题