【问题标题】:Dart math calculations are inaccurate [duplicate]飞镖数学计算不准确[重复]
【发布时间】:2022-02-24 04:52:41
【问题描述】:

飞镖计算已关闭。我们遇到了四舍五入的问题(金融应用)

这里是example

飞镖输出

Hours              : 7.5
Rate               : 19.61
Val (Hours * Rate) : 147.075

Val * 100 (should be 14707.5) : 14707.499999999998
Round Val (now rounds down)   : 14707
Val / 100                     : 147.07 (should have been 147.08)

这会导致显示值到小数点后 2 位的舍入错误。

有没有办法在 dart 中准确地做到这一点?

【问题讨论】:

  • 关于在 Dart 中做什么:如果你关心 decimal 精度,那么你可以使用package:decimal

标签: dart


【解决方案1】:

这是一个浮点精度的东西,与语言本身无关。有很多方法可以解决这个问题。见下面我的。

void main() {
  var vHours = 7.5;
  print('Hours              : $vHours');
  
  var vRate = 19.61;
  print('Rate               : $vRate');

  var vValue = vHours * vRate;
  print('Val (Hours * Rate) : $vValue');

  print('');
  var vMul = (vValue * 100);
  var vMulString = vMul.toStringAsFixed(2);
  var vMulParsed = num.parse(vMulString);
  print('Val * 100 (should be 14707.5) : $vMulParsed');
  var vMulRounded = vMulParsed.round();
  print('Round Val (now rounds down)   : $vMulRounded');
  
  var vDiv = vMulRounded / 100;
  print('Val / 100                     : $vDiv (should have been 147.08)');
}

【讨论】:

  • 谢谢!这将满足我们的需要。
猜你喜欢
  • 1970-01-01
  • 2013-11-07
  • 1970-01-01
  • 1970-01-01
  • 2018-10-29
  • 2013-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多