如何将 double 转换为具有 2 位有效数字的字符串?
How to convert double into string with 2 significant digits?
所以我有小的双精度值,我需要将它们转换成字符串才能显示在我的应用程序中。但我只关心前两位有效数字。
它应该像这样工作:
convert(0.000000000003214324) = '0.0000000000032';
convert(0.000003415303) = '0.0000034';
我们可以将 double 转换为字符串,然后检查每个索引并获取最多两个非零(也 .
)字符串。但是问题出现在 long double.
的科学记数法上
你可以查看
在这种情况下,我们需要找到准确的字符串值。我正在寻求
的帮助
String convert(String number) {
String result = '';
int maxNonZeroDigit = 2;
for (int i = 0; maxNonZeroDigit > 0 && i < number.length; i++) {
result += (number[i]);
if (number[i] != '0' && number[i] != '.') {
maxNonZeroDigit -= 1;
}
}
return result;
}
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;
}
void main() {
final num1 = 0.000000000003214324;
final num2 = 0.000003415303;
final v1 = convert(toExact(num1));
final v2 = convert(toExact(num2));
print("num 1 $v1 num2 $v2");
}
运行 在 dartPad
所以我有小的双精度值,我需要将它们转换成字符串才能显示在我的应用程序中。但我只关心前两位有效数字。 它应该像这样工作:
convert(0.000000000003214324) = '0.0000000000032';
convert(0.000003415303) = '0.0000034';
我们可以将 double 转换为字符串,然后检查每个索引并获取最多两个非零(也 .
)字符串。但是问题出现在 long double.
你可以查看
在这种情况下,我们需要找到准确的字符串值。我正在寻求
String convert(String number) {
String result = '';
int maxNonZeroDigit = 2;
for (int i = 0; maxNonZeroDigit > 0 && i < number.length; i++) {
result += (number[i]);
if (number[i] != '0' && number[i] != '.') {
maxNonZeroDigit -= 1;
}
}
return result;
}
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;
}
void main() {
final num1 = 0.000000000003214324;
final num2 = 0.000003415303;
final v1 = convert(toExact(num1));
final v2 = convert(toExact(num2));
print("num 1 $v1 num2 $v2");
}
运行 在 dartPad