/// Return as number as formatted in thousands string.
/// Example: -123456.asThousands() returns -123'456
String asThousands({
final String separator = "'",
final int digits = 3,
}) {
assert(digits >= 1, '5d40ef0f-f8b4-4070-adf4-bbfc1a8b663b');
final chars =
abs().truncate().toString().split(StringHelper.empty).reversed;
var n = 0;
var result = StringHelper.empty;
for (final ch in chars) {
if (n == digits) {
result = '$ch$separator$result';
n = 1;
} else {
result = '$ch$result';
n++;
}
}
result = this < 0 ? '-$result' : result;
result = (this is double)
? '$result${toString().substring(toString().lastIndexOf('.'))}'
: result;
return result;
}
Here, `string` is an input string with indexes starting at 0.
let i = (length of string) - 3
while i > 0 do
insert a "," into string at position (i)
let i = i - 3
return string
Dart代码
extension on int {
String get priceString {
final numberString = toString();
final numberDigits = List.from(numberString.split(''));
int index = numberDigits.length - 3;
while (index > 0) {
numberDigits.insert(index, ',');
index -= 3;
}
return numberDigits.join();
}
}
final numberFormat = NumberFormat.decimalPattern('hi');
extension ExtOnNum on num {
format() {
final parts = toString().split('.');
return '${numberFormat.format(num.tryParse(parts[0]) ?? 0.0)}.${parts[1]}';
}
}
7条答案
按热度按时间mqkwyuun1#
您可以使用NumberFormat在ICU格式模式中传递自定义格式,请参阅NumberFormat。
产出
vatpfxk52#
我发现intl包中的NumberFormat类非常有用,因为它提供了不同的数字格式化方法。
默认情况下,NumberFormat类使用默认的美国语言环境格式化以百万为单位的数字,我们可以使用印度语言环境格式化以千为单位的数字(它可以根据任何国家的语言环境格式化数字或货币)。
NumberFormat.decimalPattern([String locale])
。产出
ecfdbz9o3#
你不需要使用NumberFormat软件包就可以做到这一点。这应该会有帮助,用任何数字测试它。
然后,您可以通过打印来使用:
输出:
eqfvzcg84#
您可以使用此更灵活的扩展:
示例调用:
5m1hhzi45#
该活动的伪代码如下所示:
Dart代码
rsl1atfo6#
如果你想用千位分隔符格式化一个数字,并给它一个十进制数的最大值。
希望这对你有帮助
7eumitmz7#
这里最简单的方法是使用
intl
中的NumberFormat类,请按照给定的步骤操作。将此软件包添加到您的
pubspec.yaml
在dart扩展文件中使用下面这行代码
输出: