Dart でC をエミュレートしたいのですがsprintf("%02d", x);
、文字列の書式設定が見つからず、文字列の補間しか見つかりません。
9617 次
7 に答える
9
文字列補間は、ほとんどのニーズをカバーします。数値を直接フォーマットしたい場合は、 もありnum.toStringAsPrecision()
ます。
于 2012-02-16T20:45:36.003 に答える
6
私はこの問題に対して別のアプローチを取りました: 文字列を直接パディングすることにより、ライブラリを使用する必要がありません (主に intl ライブラリが廃止されたように見えるため):
x.toString().padLeft(2, "0");
sprintf("%02d", x); と同等です。
于 2014-10-07T22:37:39.533 に答える
6
String.formatメソッドは現在存在しませんが、それを追加するためのバグ/機能要求があります。
于 2012-02-15T10:35:37.997 に答える
6
intl ライブラリは、値をフォーマットするためのいくつかのヘルパーを提供します。http://api.dartlang.org/docs/releases/latest/intl.htmlで API ドキュメントを参照してください。
数値を 2 文字の文字列に変換する方法の例を次に示します。
import 'package:intl/intl.dart';
main() {
var twoDigits = new NumberFormat("00", "en_US");
print(twoDigits.format(new Duration(seconds: 8)));
}
于 2013-07-14T07:01:15.183 に答える
2
Dart の String.format の実装を次に示します。完璧ではありませんが、私にとっては十分に機能します:
static String format(String fmt,List<Object> params) {
int matchIndex = 0;
String replace(Match m) {
if (matchIndex<params.length) {
switch (m[4]) {
case "f":
num val = params[matchIndex++];
String str;
if (m[3]!=null && m[3].startsWith(".")) {
str = val.toStringAsFixed(int.parse(m[3].substring(1)));
} else {
str = val.toString();
}
if (m[2]!=null && m[2].startsWith("0")) {
if (val<0) {
str = "-"+str.substring(1).padLeft(int.parse(m[2]),"0");
} else {
str = str.padLeft(int.parse(m[2]),"0");
}
}
return str;
case "d":
case "x":
case "X":
int val = params[matchIndex++];
String str = (m[4]=="d")?val.toString():val.toRadixString(16);
if (m[2]!=null && m[2].startsWith("0")) {
if (val<0) {
str = "-"+str.substring(1).padLeft(int.parse(m[2]),"0");
} else {
str = str.padLeft(int.parse(m[2]),"0");
}
}
return (m[4]=="X")?str.toUpperCase():str.toLowerCase();
case "s":
return params[matchIndex++].toString();
}
} else {
throw new Exception("Missing parameter for string format");
}
throw new Exception("Invalid format string: "+m[0].toString());
}
テスト出力は次のとおりです。
format("%d", [1]) // 1
format("%02d", [2]) // 02
format("%.2f", [3.5]) // 3.50
format("%08.2f", [4]) // 00004.00
format("%s %s", ["A","B"]) // A B
format("%x", [63]) // 3f
format("%04x", [63]) // 003f
format("%X", [63]) //3F
于 2015-03-19T09:07:49.383 に答える
1
はい、Dart には sprintf パッケージがあります: https://pub.dev/packages/sprintf。C の sprintf をモデルにしています。
于 2019-06-25T21:44:52.807 に答える