如何将 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