【问题标题】:Proper way to do rounding for currency conversion in Paypal?在Paypal中进行货币转换四舍五入的正确方法?
【发布时间】:2012-02-01 19:14:33
【问题描述】:

我正在构建一个与 paypal 集成的电子商务网站。

我们采用多种货币,因此我想确保(出于会计原因)我正确地执行货币转换的任何数学运算。

在乘以货币换算*原始货币后,我总是在小数点后得到很多尾随数字。

有没有标准的方法来做到这一点?我应该截断还是舍入?如果四舍五入小数点的 1/1000 会影响小数点的四舍五入,是否需要多次四舍五入?

我是否应该这样做:

Math.Round(Math.Round(x, 3), 2)

我一直无法找到有关如何完成此操作的有用信息(希望美国和欧洲是一样的)。

【问题讨论】:

  • 你能根据你得到的小数位数使用某种格式吗?

标签: c# paypal decimal currency rounding


【解决方案1】:

你应该使用Math.Round(x, 2, MidpointRounding.AwayFromZero)

【讨论】:

  • 这不是上面提到的“银行家四舍五入”……有什么想法吗?
  • 我想,既然你们在进行货币兑换,那么你们总能得到不存在的一小部分美分可能会更好。
  • 嗯......这是最接近答案的地方。在与会计师交谈后,据说诀窍是在计算您的税款/增值税时始终从 5 开始向上取整。这样,您始终可以确定/安全地缴纳税款。与原始帖子的主题略有不同 - 但我的问题已得到解答。
  • 这是我在学校学习四舍五入的方式,因为我从不(不必要地)在中间计算中使用四舍五入的值,所以我不担心四舍五入的偏差,我不能让自己使用 .NET 中的默认舍入方法。另请注意,.ToString("0.00") 使用此方法,在 Excel 中显示舍入也是如此。
  • 这仅适用于小数点右边两位小数的货币,即欧元和美元行。有许多不同的货币,例如阿尔及利亚、伊拉克、科威特和其他一些中东国家,使用 3 位小数,比特币使用 8。Chtiwi Malek 的答案适用于任何货币。
【解决方案2】:

我假设您应该能够直接使用 Math.Round,因为 .NET 使用 Bankers Rounding.

请记住始终将舍入作为绝对最后一件事,以免引入舍入错误。

在这样的货币系统中,我还会将未四舍五入的实际值存储为小数,以便将来解决问题。

【讨论】:

    【解决方案3】:

    如果您的网站有多种货币,则根据当前用户的货币和文化使用它来正确舍入小数:

    int currencyDecs = System.Threading.Thread.CurrentThread.CurrentCulture.NumberFormat.CurrencyDecimalDigits;
    decimal roundedDecimalPrice = Math.Round(decimalPrice, currencyDecs, MidpointRounding.AwayFromZero);
    

    【讨论】:

      猜你喜欢
      • 2011-09-10
      • 1970-01-01
      • 2021-05-23
      • 2010-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-07
      • 2018-02-14
      相关资源
      最近更新 更多