common_utils icon indicating copy to clipboard operation
common_utils copied to clipboard

NumUtil.divide 存在的问题

Open LiWenHui96 opened this issue 2 years ago • 4 comments

NumUtil.divide 方法,当 a/b = 1/3 时,

报错信息如下:

'package:decimal/decimal.dart': Failed assertion: line 27 pos 38: '_rational.hasFinitePrecision': is not true.

image

使用 toDecimal() 方法需要添加 scaleOnInfinitePrecision 参数

LiWenHui96 avatar Feb 14 '22 06:02 LiWenHui96

NumUtil.divide(3.14, 180);

3.14 / 180 也会出现这样的问题。

貌似只要小数点比较多就会出现: 'package:decimal/decimal.dart': Failed assertion: line 27 pos 38: '_rational.hasFinitePrecision': is not true.

pyzworld avatar Mar 08 '22 15:03 pyzworld

是无理数的情况下,才会出现

LiWenHui96 avatar Mar 09 '22 02:03 LiWenHui96

找到解决方案了么

purgeyao avatar Apr 22 '22 03:04 purgeyao

找到解决方案了么

我想你可以自己去重写除的方法,去加上 scaleOnInfinitePrecision 这个参数,当然这里也有我的一份作为参考。

  double divide(num? num1, num? num2, {int? scaleOnInfinitePrecision) {
    final Rational value = Decimal.parse(num1.toString()) / Decimal.parse(num2.toString());
    return value
        .toDecimal(scaleOnInfinitePrecision: scaleOnInfinitePrecision)
        .toDouble();
  }

LiWenHui96 avatar Apr 24 '22 01:04 LiWenHui96