【问题标题】:convert char* to double with max 2 places after the point将 char* 转换为 double 点后最多 2 个位置
【发布时间】:2010-11-29 04:18:25
【问题描述】:

我正在从文件中读取令牌,它会完美地输入字符指针 在文件中,但在将其发送到此函数之后:

double CharToDouble(char *ptemp)
{
 if(ptemp != NULL)
 {
  if(ptemp[0] == '0')
   return atof(ptemp);
  else
   return atof(ptemp)/100;
 }
 return 0;
}

我在保存这个函数结果的双打中得到的值就像 0.6600000000001 0.280000000000000000

和类似的东西,我希望它像 char*.. 这是钱的问题,以美分为单位。

有什么想法吗?

【问题讨论】:

  • 仅供参考,格式化您的代码突出显示它并点击 CTRL+K 或 101 图标,而不是阻止引号。

标签: c char double


【解决方案1】:

如果它是一种货币,则乘以 100 并向下舍入为整数,因此您得到的不是 123.45,而是 12345。

注意:Float 和 Double 仅在达到一定精度(机器精度)时才准确,因为并非每个实数都可以以浮点格式编码。

当你只对正确格式的输出感兴趣时,你必须使用正确的printf命令,即

double currency_value = 9.95;
printf("Currency: %.2f", currency_value)

查找“格式字符串”以了解更多信息。 %.2f 表示我想要一个浮点数,在逗号 (f) 之后具有固定位置,并且该位置应该是逗号 (2) 之后的第二个数字。

【讨论】:

  • 但是在使用 atof(char* x) 将其转换为 double 时,有时会将 char 0.78 转换为 double 0.78000000000001,这没关系,我可以按照您的解释处理它,​​但有时它会传输 char 0.85到双 0.849999999999999999991 或类似的东西..
  • @Kobby:所以,你需要四舍五入,而不是“向下舍入”。试试 math.c 函数round(double) 来清理你的输入。 printf("%.2f", x) 也会在输出时四舍五入,因此 0.8499... 仍将显示为 0.85。
猜你喜欢
  • 2013-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-02
相关资源
最近更新 更多