截断至小数点后两位,不四舍五入

Gar*_*all 7 dart

无法找到或找出适用于 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)


lrn*_*lrn 3

尝试

double truncateToHundreths(num value) => (value * 100).truncate() / 100;
Run Code Online (Sandbox Code Playgroud)

在某些情况下,您会丢失精度,但这要求您在数字中使用几乎所有 53 位双精度(当乘以 100 时首先会丢失精度)。

遍历字符串是一个很大的开销,如果可能的话,我会避免这种开销,除非您实际上希望之后将数字转换为字符串。