Dart中的 double 与 js 中的 小数运算 一样,会出现 精度问题, 如以下情况:
var a = 1.0;
var b = 1;
var c = 1.1;
a - b = 1.00
c - b = 0.10000000000000000009
0.2 + 0.1 = 0.30000000000000004
原因分析:
这是由于 Dart 使用了和js一样的 IEEE 754 双精度标准进行存储。
解决方案: 像js一样 将 小数转化为 整数 后,计算后再 转回小数
如: 取 两位小数
int aInt = (a*100).floor();
int bInt = (b*100).floor();
int cInt = (c*100).floor();
(aInt - bInt)/100 = 1
(cInt - bInt)/100 = 0.1
使用 第三方库 如
decimal: ^1.1.0
import 'package:decimal/decimal.dart';
final d = Decimal.parse;
d('0.2') + d('0.1'); // => 0.3
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)