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 的偏差。
我有一个 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 的偏差。