flutter 如何四舍五入双到2个小数位和删除尾随零?

zd287kbt  于 2023-02-05  发布在  Flutter
关注(0)|答案(2)|浏览(816)

我找不到一种方法来四舍五入双到2个小数位,并删除尾随零在 dart 。我找到了一种方法来四舍五入,但它不工作,如果我试图截断尾随零。
以下是我正在努力做的事情:

double x = 5.0;
double y = 9.25843223423423;
double z = 10.10;

print(x); //Expected output --> 5
print(y); //Expected output --> 9.26
print(z); //Expected output --> 10.1

编辑:
我发现了一个解决上面前2个print语句的方法。我想我应该为搜索它的人添加它。

String getFormattedNumber( num ) {

  var result;
  if(num % 1 == 0) {
    result = num.toInt();
  } else {
    result = num.toStringAsFixed(2);
  }
return result.toString();

}

fhg3lkii

fhg3lkii1#

根据小数表示法对浮点数进行舍入没有多大意义,因为许多小数(如0.3can't be exactly represented by floating point numbers anyway。(这是所有浮点数固有的特性,并非特定于Dart。)
但是,您可以尝试使数字的 string 表示形式更美观。num.toStringAsFixed舍入到指定的小数位数。在此基础上,您可以使用正则表达式删除尾随零:

String prettify(double d) =>
    // toStringAsFixed guarantees the specified number of fractional
    // digits, so the regular expression is simpler than it would need to
    // be for more general cases.
    d.toStringAsFixed(2).replaceFirst(RegExp(r'\.?0*$'), '');

double x = 5.0;
double y = 9.25843223423423;
double z = 10.10;

print(prettify(x)); // Prints: 5
print(prettify(y)); // Prints: 9.26
print(prettify(z)); // Prints: 10.1

print(prettify(0)); // Prints: 0
print(prettify(1)); // Prints: 1
print(prettify(200); // Prints: 200

另请参见How to remove trailing zeros using Dart

55ooxyrt

55ooxyrt2#

下面是您想要的示例代码。
1.乘以10^(点后数字的计数)
如果点后数计数为2
9.25843223423423至〉925.843223423423
1.第1轮)的结果
925.843223423423 -〉926
1.除以10^(点后数的计数)
926 -〉9时26分

import 'dart:math';

void main() {
  double x = 0.99;
  double y = 9.25843223423423;
  double z = 10.10;

  print(x); //Expected output --> 5
  print(y); //Expected output --> 9.26
  print(z); //Expected output --> 10.1
  
  print(customRound(x, 2));
  print(customRound(y, 2));
  print(customRound(z, 2));
  
  for(var i = 0.01 ; i < 1 ; i += 0.01) {
    print(customRound(i, 2));
  }
}

dynamic customRound(number, place) {
  var valueForPlace = pow(10, place);
  return (number * valueForPlace).round() / valueForPlace;
}

相关问题