string - 将 long double 转换为没有科学记数法的字符串(Dart)

标签 string dart double

我想在 Dart 中将 long double 转换为没有科学记数法的字符串,我认为只做一个 .toString() 就可以了,但事实并非如此。
这是我的代码:

void main() {  
  double num = 0.00000000196620214137477;
  String numToString = num.toString();
  
  print(num);
  print(numToString);
}
这是它打印的内容:
1.96620214137477e-9
1.96620214137477e-9
我想要一个数字的字符串表示,因为它在定义时被写入。所以转换为字符串后我想要的打印输出是:
0.00000000196620214137477
提前致谢。

最佳答案

没有简单的方法可以直接使用 Dart 平台库做你想做的事,主要是因为没有办法在 JavaScript 中做到这一点。
您可以使用 num.toStringAsFixed(20) ,但仅限于 20 位,而您的号码需要 23。
您可以做的一件事是直接操作字符串:

String toExact(double value) {
  var sign = "";
  if (value < 0) {
    value = -value; 
    sign = "-";
  }
  var string = value.toString();
  var e = string.lastIndexOf('e');
  if (e < 0) return "$sign$string";
  assert(string.indexOf('.') == 1);
  var offset = int.parse(string.substring(e + (string.startsWith('-', e + 1) ? 1 : 2)));
  var digits = string.substring(0, 1) + string.substring(2, e);
  if (offset < 0) { 
    return "${sign}0.${"0" * ~offset}$digits";
  }
  if (offset > 0) {
    if (offset >= digits.length) return sign + digits.padRight(offset + 1, "0");
    return "$sign${digits.substring(0, offset + 1)}"
        ".${digits.substring(offset + 1)}";
  }
  return digits;
}
请注意,您不一定能获得所写的值,因为并非所有 double 值都是精确的。在这种特殊情况下,您似乎没事。

关于string - 将 long double 转换为没有科学记数法的字符串(Dart),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62989638/

相关文章:

java - 如何将文件中的数据读取到数组中?

java - 如何切换数组列表中的字符串对?

Flutter Web 平台检查

c# - 在 C# 中使用 Double.TryParse 方法转换字符串

java - 如何从我的字符串中删除一些字符

计算字符串中的单词 - C 编程

flutter - 远程更改列表中的小部件状态

flutter - ClojureDart : Execution error at cljd. 编译器/load-libs-info (compiler.cljc :126). EOF 读取时

c - fmod 十进制数的最佳方法是什么?

生成所有对的排列而不重复的算法