Dart 大数与精度损失

Dart 大数与精度损失,dart,Dart,我执行此操作,希望得到不带指数的结果: main(){ var结果=((1.1+2)+3.14+4+(5+6+7)+(8+9+10)*426738733344334646477677634)/2*55334430034349999000; 打印(结果);//带指数 打印(result.toInt());//完整数字? } 它可以打印出来 3.18780189038289e+49 31878018903828901761984975061078744643351263313920 但是toIn

我执行此操作,希望得到不带指数的结果:

main(){
var结果=((1.1+2)+3.14+4+(5+6+7)+(8+9+10)*426738733344334646477677634)/2*55334430034349999000;
打印(结果);//带指数
打印(result.toInt());//完整数字?
}
它可以打印出来

3.18780189038289e+49
31878018903828901761984975061078744643351263313920
但是
toInt()
结果是错误的,好的结果是318780189038288992774920244949137690701584023926880。它使用groovy(web)控制台进行检查。
如何才能得到整数?

由于在
结果
中有
double
文本,
结果
类型为
double

在Dart中,a
double
是:

IEEE 754标准规定的64位(双精度)浮点数

这就是你失去精确性的原因

您可以通过以下代码看到精度损失:

final bignum=318780189038288999277492024491376690701584023926880;
打印(bignum);
//显示3187801890382889927749202449137690701584023926880
打印(bignum.toDouble().toInt());
//显示318780189038289017619849750610787474643351263313920
这种精度损失不是Dart特有的,例如
3187801890382889927749202449137690701584023926880.0
3187801890382890176198497506107744643351263313920.0
在Java中是相等的

GroovyWeb控制台提供了正确的结果,因为AFAICT

最后,你可以使用星号,直到小数本机支持,你可以使用我的