【发布时间】:2019-08-10 19:07:22
【问题描述】:
在 Java 中,货币通常存储在 BigDecimal 中。但是在 Dart 中使用什么来存储货币值呢? BigInt 似乎不是一个解决方案,因为它仅适用于整数值。
【问题讨论】:
-
你可以试试money包
在 Java 中,货币通常存储在 BigDecimal 中。但是在 Dart 中使用什么来存储货币值呢? BigInt 似乎不是一个解决方案,因为它仅适用于整数值。
【问题讨论】:
绝对不将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.
}
【讨论】: