Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dart-双数据类型加法产生长十进制值_Dart_Flutter_Dart 2 - Fatal编程技术网

Dart-双数据类型加法产生长十进制值

Dart-双数据类型加法产生长十进制值,dart,flutter,dart-2,Dart,Flutter,Dart 2,在下面的程序中,我将添加双打列表 我期望的输出是57.7,但结果是57.69999996 void main() { List<double> list= [1.0,1.0,1.0,1.0,0.8,52.9]; double total = 0.0; list.forEach((item) { total = total + item; }); print(total); } void main(){ 列表=[1.0,1.0,1.0,1.0,0.8,

在下面的程序中,我将添加双打列表

我期望的输出是57.7,但结果是57.69999996

void main() {
  List<double> list= [1.0,1.0,1.0,1.0,0.8,52.9];
  double total = 0.0;

  list.forEach((item) {
    total = total + item;
  });
  print(total);

}
void main(){
列表=[1.0,1.0,1.0,1.0,0.8,52.9];
双倍合计=0.0;
列表.forEach((项目){
总计=总计+项目;
});
印刷品(总数);
}

这是预期的行为吗?

是的,这是预期的行为-要获得预期的结果,请使用-
.toStringAsFixed(1)

void main(){
列表=[1.0,1.0,1.0,1.0,0.8,52.9];
双倍合计=0.0;
列表.forEach((项目){
总计=总计+项目;
});
打印(总计固定(1));
}
产出:57.7


使用reduce将解决这个问题

var total = [1.1, 2.2, 3.3].reduce((a, b) => a + b); // 6.6

这是由于浮点数学。这种行为在许多语言中都很常见。如果你想了解更多,我推荐这个。有些语言(如Java)的类可以处理这种类型的精确操作,但是Dart对此没有官方支持,幸运的是解决了这个问题,有一个包。我会让你看看什么对我有用。使用您的代码如下所示:

import 'package:decimal/decimal.dart';

void main() {
 List<double> list = [1.0, 1.0, 1.0, 1.0, 0.8, 52.9];
 
 double total = list.fold(0, (total, value) {
  var result = Decimal.parse(total.toString()) + Decimal.parse(value.toString());
  return double.parse(result.toString());
 });

 print(total); // 57.7
}
首先,为了解决主要问题,我们必须使用一个名为decimal的包,在pubspec.yaml中添加以下依赖项并更新包:

name: ...
dependencies:
  decimal: ^0.3.5
  ...
然后,您的文件将如下所示:

import 'package:decimal/decimal.dart';

void main() {
 List<double> list = [1.0, 1.0, 1.0, 1.0, 0.8, 52.9];
 
 double total = list.fold(0, (total, value) {
  var result = Decimal.parse(total.toString()) + Decimal.parse(value.toString());
  return double.parse(result.toString());
 });

 print(total); // 57.7
}
import'package:decimal/decimal.dart';
void main(){
列表=[1.0,1.0,1.0,1.0,0.8,52.9];
double total=list.fold(0,(总计,值){
var result=Decimal.parse(total.toString())+Decimal.parse(value.toString());
返回double.parse(result.toString());
});
打印(总计);//57.7
}

Obs:我使用了谷歌翻译器。

用于带舍入的双类型加法


list.map((m)=>double.parse(m.totalTax.toDouble().toString()).reduce((a,b)=>a+b).round()

欢迎来到精彩的浮点数世界。是的,这很正常,而且这个问题经常被问到。例如,请参见此处注释中的所有链接。您可以将代码块用于代码部分