Dart double toStringAsFixed 将数字四舍五入,但它不应该

Dart double toStringAsFixed rounds the number, but it shouldn't

我有一个 Flutter 项目,在 SharedPrefs 中,我正在存储来自第三方 API 的双 ID。 (所以我只能得到它作为双)

来自 prefs 的 id 是 43449716574226770.0

我必须将这个双精度解析为一个字符串,我是这样做的:

String idString = id.toStringAsFixed(0)  

我得到的是某种方式:43449716574226768 但我希望它只是 43449716574226770

我也试过.toInt().toString(),结果一样。

最奇怪的是它有时可以与其他 ID 一起使用。

你能试试这个吗

double x=43449716574226770.0;
print(x.toString());

让它id.round().toString(),它会起作用。

这个数字只要在6字节范围内? 作为指数部分的两倍,这可能意味着前一个双倍(按位)的差异大于 1。另请参阅 java Math.ulp.

这意味着使用 double 而不是 long 会将一些双 ID 映射到相同的“长”ID。

我不确定这是这里的问题,但它可以解释 2 的偏差。