【问题标题】:Dart: best type to store currencyDart:存储货币的最佳类型
【发布时间】:2019-08-10 19:07:22
【问题描述】:

在 Java 中,货币通常存储在 BigDecimal 中。但是在 Dart 中使用什么来存储货币值呢? BigInt 似乎不是一个解决方案,因为它仅适用于整数值。

【问题讨论】:

  • 你可以试试money

标签: dart currency


【解决方案1】:

绝对doubles 用于会计应用程序。二进制浮点数本身不能表示精确的十进制值,这可能导致inaccurate calculations for seemingly trivial operations。即使错误很小,它们最终也会累积成更大的错误。对二进制数设置十进制精度并没有什么意义。

对于货币,您应该使用一些旨在存储十进制值的东西(例如package:decimal),或者应该使用fixed-point arithmetic 来存储美分(或者您想要跟踪的任何最小数量的货币)。例如,不要使用doubles 来存储诸如$1.23 之类的值,而是使用ints 来存储以最小货币单位(例如123 美分)表示的金额。然后,您可以使用辅助类来格式化显示的金额。例如:

class Money {
   int cents;

   Money({required this.cents});

   @override
   String toString() => (cents / 100).toStringAsFixed(2);

   Money operator +(Money other) => Money(cents: cents + other.cents);

   // Add other operations as desired.
}

【讨论】:

    猜你喜欢
    • 2012-10-13
    • 2017-11-21
    • 2011-10-19
    • 2010-11-08
    • 2010-09-14
    • 1970-01-01
    相关资源
    最近更新 更多