将LONG DOUBLE转换为不带科学记数法的字符串(DART) [英] Convert long double to string without scientific notation (Dart)

查看:33
本文介绍了将LONG DOUBLE转换为不带科学记数法的字符串(DART)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在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;
}

请注意,您不一定能获得写入的,因为并非所有的双精度值都是精确的。在这种情况下,您看起来很好。

这篇关于将LONG DOUBLE转换为不带科学记数法的字符串(DART)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆