首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >不使用科学符号将long double转换为string (Dart)

不使用科学符号将long double转换为string (Dart)
EN

Stack Overflow用户
提问于 2020-07-20 06:19:35
回答 2查看 2.1K关注 0票数 6

我想用Dart将一个长的双变量转换成没有科学符号的字符串,我认为只执行.toString()就可以了,但事实并非如此。

这是我的密码:

代码语言:javascript
运行
复制
void main() {  
  double num = 0.00000000196620214137477;
  String numToString = num.toString();
  
  print(num);
  print(numToString);
}

这是它打印出来的:

代码语言:javascript
运行
复制
1.96620214137477e-9
1.96620214137477e-9

我想要一个数字的字符串表示,因为它是在定义时编写的。因此,在转换为string之后,我想要的打印输出是:

代码语言:javascript
运行
复制
0.00000000196620214137477

提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-07-20 06:58:12

在Dart平台库中,没有一种简单的方法可以直接完成您想要的事情,这主要是因为在JavaScript中无法做到这一点。

您可以使用num.toStringAsFixed(20),但限制为20位数,您的号码需要23位。

您可以做的一件事是直接操作字符串:

代码语言:javascript
运行
复制
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;
}

请注意,您不一定能够得到写入的值,因为并不是所有的双值都是精确的。在这种情况下,你似乎很好。

票数 8
EN

Stack Overflow用户

发布于 2020-08-02 06:52:50

使用十进制包还有另一种更简单的方法来实现这一点。最近遇到了颤振.飞镖.数字处理能力的问题,这个问题指向了这个方案。

例子:

代码语言:javascript
运行
复制
double originalNum = 0.00000000196620214137477;
Decimal convertedNum = Decimal.parse(originalNum.toString());
print('originalNum: $originalNum \n convertedNum: $convertedNum');

输出:

代码语言:javascript
运行
复制
originalNum: 1.96620214137477e-9 
convertedNum: 0.00000000196620214137477
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62989638

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档