Dart double toStringAsFixed 对数字进行四舍五入,但它不应该

问题描述 投票:0回答:4

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

首选项中的 ID 是

43449716574226770.0

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

String idString = id.toStringAsFixed(0)  

我得到的是某种:

43449716574226768
但我希望它只是
43449716574226770

我也尝试过

.toInt().toString()
,结果相同。

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

string flutter dart parsing double
4个回答
1
投票

这个数字是否会在 6 字节范围内? 由于将其与指数部分相加,这可能意味着前一个双精度(按位)的差异将超过 1。另请参阅 java Math.ulp

这意味着使用

double
而不是
long
会将一些双 ID 映射到相同的“长”ID。

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


1
投票

你可以试试这个吗

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

0
投票

做它

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


0
投票

最近我通过以下自定义方法解决了此类任务。

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.

© www.soinside.com 2019 - 2024. All rights reserved.