截断到小数点后2位而不四舍五入

时间:2020-03-29 10:56:21

标签: dart

找不到或制定出适用于Dart的解决方案。

我已经尝试过:
1. toStringAsFixed()-此轮
2. double.parse(number.toStringAsFixed())-此轮
3. num-num%0.01-此回合

我在SO上找到了一些解决方案,但是它们要么使用Flutter / Dart上不提供的功能,要么对我不起作用。

任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:2)

尝试

double truncateToHundreths(num value) => (value * 100).truncate() / 100;

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

去低谷字符串是一个巨大的开销,如果可能的话,我会避免的,除非您实际上希望以后将数字转换为字符串。

答案 1 :(得分:1)

(value * 100).truncateToDouble() / 100

示例:
var lat = 29.4562

lat * 100 = 2945.62
2945.62 truncateToDouble() = 2945
2945/100 = 29.45

答案 2 :(得分:0)

以@Irn漂亮的答案为基础。

下面的函数可让您指定所需的小数位数/小数位数

double truncateToDecimalPlaces(num value, int fractionalDigits) => (value * pow(10, 
   fractionalDigits)).truncate() / pow(10, fractionalDigits);

示例

truncateToDecimalPlace(4321.92385678, 3) // 4321.923

或者我最喜欢的方式是使用Dart扩展

extension TruncateDoubles on double {
   double truncateToDecimalPlaces(int fractionalDigits) => (this * pow(10, 
     fractionalDigits)).truncate() / pow(10, fractionalDigits);
}

这使您可以像这样在double对象上调用函数

用法

4321.92385678.truncateToDecimalPlace(3); // 4321.923