我有一个 Flutter 项目,在 SharedPrefs 中,我存储来自第三方 API 的双 id。 (所以我只能得到双份)
首选项中的 ID 是
43449716574226770.0
我必须将这个双精度解析为字符串,我这样做:
String idString = id.toStringAsFixed(0)
我得到的是某种:
43449716574226768
但我希望它只是43449716574226770
我也尝试过
.toInt().toString()
,结果相同。
最奇怪的部分是它有时可以与其他 id 一起使用。
这个数字是否会在 6 字节范围内? 由于将其与指数部分相加,这可能意味着前一个双精度(按位)的差异将超过 1。另请参阅 java Math.ulp。
这意味着使用
double
而不是 long
会将一些双 ID 映射到相同的“长”ID。
我不确定这是这里的问题,但它可以解释 2 的偏差。
做它
id.round().toString()
,它会起作用的。
最近我通过以下自定义方法解决了此类任务。
String coinFormatFixedNew(num? number, {int? fixed}) {
number = number ?? 0;
fixed = fixed ?? 4;
String numberStr = number.toDouble().toString();
final numList = numberStr.split(".").toList();
if (fixed == 0) {
return numList[0];
} else {
numberStr = numList[1];
if (numberStr.length >= fixed) {
numberStr = numberStr.substring(0, fixed);
}
return "${numList[0]}.$numberStr";
}
}
它将返回 43449716574226770 为您的值 43449716574226770.0.