【问题标题】:Round of floating values [duplicate]一轮浮动值[重复]
【发布时间】:2013-04-01 21:35:44
【问题描述】:

我正在设计一个收银机,我必须在其中比较 2 个浮点值,并且每次比较时都会出错。即因为我无法将金额的差异四舍五入到小数点后 2 位并将其与价值观。

例如。如果客户支付的金额是 60.36 并且发出的账单是 30.24 出来的差异是 30.120001 。 我什至尝试使用 floor 函数将其四舍五入为两位小数: 地板f(diff*100+.5)/100;但它不起作用。

我应该如何四舍五入十进制数字并在设计收银机时使用它们?

【问题讨论】:

  • 你不应该比较浮点值。
  • 错了,他不应该使用浮点数来表示货币价值。除非您使用==,否则比较它们是可以的。
  • 这就是为什么(不使用浮点数),stackoverflow.com/questions/3730019/…

标签: c floating-point floating-point-precision


【解决方案1】:

您不应该使用二进制浮点数来处理货币金额。有很多问题与舍入和浮点的不精确性有关。例如,您将无法将 0.1 完全表示为 float

请改用fixed-point arithmetic

【讨论】:

  • 那么我应该如何对浮点值(如 .01 或 .05)执行计算?
  • @user2227862 使用整数类型存储美分数。
猜你喜欢
  • 1970-01-01
  • 2013-10-04
  • 2021-01-11
  • 1970-01-01
  • 1970-01-01
  • 2012-04-29
  • 1970-01-01
  • 2015-08-04
  • 1970-01-01
相关资源
最近更新 更多