【问题标题】:Javascript - round issue when saving price excl vat from price incl vatJavascript - 从包含增值税的价格中保存不含增值税的价格时的圆形问题
【发布时间】:2020-02-26 10:49:04
【问题描述】:

在后端 (Node.js) 中,我将价格保存为美分 (*100),并且始终不包括增值税。
但是,在前端,我们希望用户能够定义包括增值税在内的价格。

所以我们要做的如下:
含增值税价格:10,00
含增值税的公式:(10*100)/1.21 给出826.4462809917355 Math.round 为:826 826 是我们保存在数据库中的不含增值税的价格。
但是当我们给它加上增值税(21%)时,它就变成了:

(826/100)*1.21

这将变成999.4599999999999
Math.round 做了 999 个。
因此,当我们的用户填写 10,00 作为含增值税的价格时。最终将是 9,99

【问题讨论】:

  • 使用Math.ceil(999.4599999999999) === 1000 ?它四舍五入
  • 你为什么将826保存到数据库而不是826.4462809917355
  • @JeremyThille 是的,但我认为在某些情况下我们确实需要四舍五入。不确定四舍五入(ceil)是否适用于每种情况
  • 然后使用Math.floor(price + 0.5)。 9.1 给 9, 9.4 给 9, 9.5 给 10, 9.6 给 10, 9.9 给 10
  • @Mortz 不确定存储浮点数是否是最好的解决方案。如果是这样,我很乐意实施它。但这与添加更多小数不一样吗?因此所有价格 * 1000 或 * 10000 而不是 * 100?

标签: javascript rounding price


【解决方案1】:

我采用的解决方案是将乘数 (100) 增加到 100000。
从那以后就没有任何问题。可能不是 100% 的解决方案,因为我认为这只会减少问题的变化。

【讨论】:

    猜你喜欢
    • 2011-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多