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中,adouble
是:
IEEE 754标准规定的64位(双精度)浮点数
这就是你失去精确性的原因
您可以通过以下代码看到精度损失:
final bignum=318780189038288999277492024491376690701584023926880;
打印(bignum);
//显示3187801890382889927749202449137690701584023926880
打印(bignum.toDouble().toInt());
//显示318780189038289017619849750610787474643351263313920
这种精度损失不是Dart特有的,例如3187801890382889927749202449137690701584023926880.0
和3187801890382890176198497506107744643351263313920.0
在Java中是相等的
GroovyWeb控制台提供了正确的结果,因为AFAICT
最后,你可以使用星号,直到小数本机支持,你可以使用我的