无法找到或找出适用于 Dart 的解决方案。
我已经尝试过:
1. toStringAsFixed() - 本轮
2. double.parse(number.toStringAsFixed()) - 本轮
3. num - num % 0.01 - 本轮
我在 SO 上找到了一些解决方案,但它们要么使用 Flutter/Dart 上不可用的功能,要么不适合我。
任何帮助将不胜感激。
Lon*_*olf 14
以@Irn 美丽的答案为基础。
下面的函数可让您指定所需的小数位数/小数位数
double truncateToDecimalPlaces(num value, int fractionalDigits) => (value * pow(10,
fractionalDigits)).truncate() / pow(10, fractionalDigits);
Run Code Online (Sandbox Code Playgroud)
例子
truncateToDecimalPlace(4321.92385678, 3) // 4321.923
Run Code Online (Sandbox Code Playgroud)
或者我最喜欢的方式是使用 Dart 扩展
extension TruncateDoubles on double {
double truncateToDecimalPlaces(int fractionalDigits) => (this * pow(10,
fractionalDigits)).truncate() / pow(10, fractionalDigits);
}
Run Code Online (Sandbox Code Playgroud)
这使您可以像这样在双精度对象上调用该函数
用法
4321.92385678.truncateToDecimalPlaces(3); // 4321.923
Run Code Online (Sandbox Code Playgroud)
尝试
double truncateToHundreths(num value) => (value * 100).truncate() / 100;
Run Code Online (Sandbox Code Playgroud)
在某些情况下,您会丢失精度,但这要求您在数字中使用几乎所有 53 位双精度(当乘以 100 时首先会丢失精度)。
遍历字符串是一个很大的开销,如果可能的话,我会避免这种开销,除非您实际上希望之后将数字转换为字符串。