将LONG DOUBLE转换为不带科学记数法的字符串(DART) [英] Convert long double to string without scientific notation (Dart)
本文介绍了将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屋!
查看全文