LoginSignup
1

More than 1 year has passed since last update.

【Dart・Flutter】数字に符号をつけたい(+とか-とかカンマとか)

Last updated at Posted at 2022-08-23

概要

DartのintlライブラリのNumberFormat classで若干ハマったので備忘録

やりたかったこと

数値に符号をつけたかった(+とか-とかカンマとか)

// 例
+5,000
-5,000

やり方

導入

今回はFlutterアプリへの導入なので

flutter pub add intl

まずはカンマをつける。

main.dart
import "package:intl/intl.dart";

void main() {

   final String format = "#,##0";
   final String formatDecimals = "#,##0.00";
   
   print("result: " + NumberFormat(format).format(5000)); // result: 5,000
   print("result: " + NumberFormat(formatDecimals).format(5000)); // result: 5,000.0
}

これは簡単

+ または - をつける

main.dart
import "package:intl/intl.dart";

void main() {

   final String format = '+#,##0;-#,##0';
   
   print("result: " + NumberFormat(format).format(5000)); // result: +5,000
   print("result: " + NumberFormat(format).format(-5000)); // result: -5,000
}

これはformatの指定の仕方がわからずしばらくハマりました。

注意点

Stringでもできるらしいんですが、上記のやり方だと数値の型(num、int、double)以外でやるとエラーになるのでご注意ください。
私の場合は、値の引数をジェネリクスにした関数を作成して、Stringをnumにparseする形で対応しました。

numberFormat.dart
String numberFormat<T>(T value, int numberOfDecimals, bool sign) {
  final String format = () {
    var result = "#,##0";
    if (1 <= numberOfDecimals) {
      result += "." + ("0" * numberOfDecimals);
    }
    if (sign) {
      return '+${result};-${result}';
    }
    return result;
  }();

  final num target = () {
    if (T != int && T != double) {
      final String stringTarget = value as String;
      return num.parse(stringTarget);
    }
    return value as num;
  }();

  return NumberFormat(format).format(target);
}

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1