Dart - NumberFormat

时间:2016-10-10 12:37:19

标签: dart number-formatting

是否可以显示NumberFormat

  • ' 15'如果double值是15.00
  • ' 15.50'如果double值是15.50

感谢您的帮助。

7 个答案:

答案 0 :(得分:8)

实际上,我认为使用truncateToDouble()toStringAsFixed()更容易,而根本不使用NumberFormat

n.toStringAsFixed(n.truncateToDouble() == n ? 0 : 2);

例如:

main() {
  double n1 = 15.00;
  double n2 = 15.50;

  print(format(n1));
  print(format(n2));
}

String format(double n) {
  return n.toStringAsFixed(n.truncateToDouble() == n ? 0 : 2);
}

打印到控制台:

15
15.50

答案 1 :(得分:4)

编辑:Martin发布的解决方案是一个更好的解决方案

我不认为这可以直接完成。你很可能需要这样的东西:

final f = new NumberFormat("###.00");

String format(num n) {
  final s = f.format(n);
  return s.endsWith('00') ? s.substring(0, s.length - 3) : s;
}

答案 2 :(得分:0)

不是很容易。如果它是一个整数值,那么解释你想要的打印零小数位数,如果它是一个浮点数就恰好是两个,你可以做

{{1}}

但除非您希望结果针对不同的区域设置进行不同的打印,否则使用NumberFormat的优势很小。

答案 3 :(得分:0)

也许您不想使用NumberFormat:

class DoubleToString {
  String format(double toFormat) {
    return (toFormat * 10) % 10 != 0 ?
      "$toFormat" :
      "${toFormat.toInt()}";
  }
}

答案 4 :(得分:0)

双值格式的一种变体:

<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.min.js"></script>

答案 5 :(得分:0)

这将起作用。

main() {
  double n1 = 15.00;
  double n2 = 15.50; 

  print(_formatDecimal(n1));
  print(_formatDecimal(n2));
}

_formatDecimal(double value) {
  if (value % 1 == 0) return value.toStringAsFixed(0).toString();
  return value.toString();
}

输出:

15
15.5

答案 6 :(得分:0)

另一种解决方案,用于NumbeFormat的字符串输出:

final f = NumberFormat("###.00");
print(f.format(15.01).replaceAll('.00'. ''));
print(f.format(15.00).replaceAll('.00'. ''));