我做这个操作,我想要没有指数的结果:
main(){
var result = ((1.1+2)+3.14+4+(5+6+7)+(8+9+10)*4267387833344334647677634)/2*553344300034334349999000;
print(result); // With exponent
print(result.toInt()); // Full number ?
}
打印
3.18780189038289e+49
31878018903828901761984975061078744643351263313920
但是toInt()
结果是错误的,好的结果是31878018903828899277492024491376690701584023926880。它用groovy(web)控制台检查它。
如何获得我的整数?
答案 0 :(得分:3)
在result
中有double
个文字,result
类型为double
。
在Dart中,double
是:
64位(双精度)浮点数,由IEEE 754标准
指定
这就是你失去精确度的原因。
您可以使用以下代码查看精度损失:
final bignum = 31878018903828899277492024491376690701584023926880;
print(bignum);
// displays 31878018903828899277492024491376690701584023926880
print(bignum.toDouble().toInt());
// displays 31878018903828901761984975061078744643351263313920
精度损失并非特定于Dart,例如31878018903828899277492024491376690701584023926880.0
和31878018903828901761984975061078744643351263313920.0
在Java中是相同的。
groovy Web控制台为您提供了正确的结果,因为AFAICT groovy literals with decimal points are instantiated as java.math.BigDecimal by default。
最后有an open issue on Decimal data type你可以加注星标,直到原生支持小数,你可以使用我的decimal package;