【发布时间】:2022-01-20 06:03:50
【问题描述】:
我想在 Dart 中设置一个双精度,我们称之为价格,这样它总是给我一个小数点后 2 位的双精度。
所以 2.5 将返回 2.50,而 2.50138263 也将返回 2.50。
【问题讨论】:
我想在 Dart 中设置一个双精度,我们称之为价格,这样它总是给我一个小数点后 2 位的双精度。
所以 2.5 将返回 2.50,而 2.50138263 也将返回 2.50。
【问题讨论】:
最简单的答案是 double 的内置 toStringAsFixed。
你的情况
double x = 2.5;
print('${x.toStringAsFixed(2)}');
x = 2.50138263;
print('${x.toStringAsFixed(2)}');
两者都会返回 2.50。请注意,这会截断(例如,2.519 返回 2.51)。它不使用标准的舍入(半偶数)银行家算法。
我建议使用 intl 包中的 NumberFormat;解析和格式化规则值得学习,因为它们出现在 Java 等其他语言中。
double d = 2.519;
String s = NumberFormat.currency().format(d);
print(s);
返回 2.52 美元
s = NumberFormat('#.00').format(d);
返回 2.52
由于您正在处理金钱,您可能应该使用NumberFormat.currency,这将添加当前语言环境的货币符号。
【讨论】:
您的问题更多是关于 Dart 如何处理类型 double。根据您的用例,以下内容可能会起作用:
void main() {
double num = 2.50138263;
num = double.parse(num.toStringAsFixed(2));
print(num);
}
更多关于 Dart 如何处理 double 的信息可以在here找到。
【讨论】: