Flutter double精度丢失问题及解决

文章提供了一个名为NumUtils的工具类,用于在Flutter开发中进行精确的数值运算,避免浮点数精度丢失问题。类中包含加、减、乘、除等方法,并提供了四舍五入保留指定小数位的功能,确保了如9.87*3.5得到34.545这样的正确结果。

Flutter项目开发中,对数据进行处理,需要四舍五入保留两位小数,正好有个数据是“9.87*3.5 = 34.545 ”用num.dart 的String toStringAsFixed(int fractionDigits)方法,但是结果却变成了34.54和Java的double计算丢经度是一个道理,具体原理可以看JAVA double精度丢失问题下面是工具类可以直接使用

import 'package:decimal/decimal.dart';
import 'package:intl/intl.dart';

/// Num Util.
class NumUtils {
   
   
  
  /// 加 (精确相加,防止精度丢失).
  static double add(num a, num b) {
   
   
    Decimal d1 = Decimal.parse(a.toString());
    Decimal d2 = Decimal.parse(b.toString());
    return (d1 + d2).toDouble();
  }

  /// 加 (精确相加,防止精度丢失).四舍五入保留指定位数小数
  static String addStr(num a, num b, int digits) {
   
   
    Decimal d1 = Decimal.parse(a.toString());
    Decimal d2 = Decimal.parse(b.toString());
    return (d1 + d2).toDouble().toStringAsFixed(digits);
  }

  /// 减 (精确相减,防止精度丢失).
  static double subtract(num a, num b) {
   
   
    Decimal d1 = Decimal.parse(a.toString())
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值