最初の便宜のために、それを取るだけです
String.format("%.2f", 0.001) // 结果 0.00
この治療法は、明らかに要件を満たしていません。
String.format("%.2f", -0.001) // 结果 -0.00
その場合、結果は-0.00になり、丸め後もシンボルは保持されます。プライベートプロジェクトのみの場合は問題ありませんが、会社がインターフェイスを介してフロントエンドにデータを提供する場合、フロントエンドは次のようになります。奇妙な。
次に、どのように対処するか、別のものを追加する必要がありますか
String res = String.format("%.2f", -0.001);
res = "-0.00".equals(res) ? "0.00": res; // 结果 0.00
ただし、この0.00シンボルの問題だけが要件を満たしていません。シナリオが増えると、ビジネスコードも同様に複雑になります。
特定のコード:
実際、追跡コードは、「%。2f」のfがこれを意味することを発見しました
Conversion.DECIMAL_FLOAT // 十进制的浮点
次に、電話するだけです
FormatSpecifier.printFloat(v, l);
特定のダブルコードで何が起こっているかを見下ろし続けます
......
......
boolean neg = Double.compare(value, 0.0) == -1; // 这里已经判断了 -0.001 的符号
if (!Double.isNaN(value)) {
double v = Math.abs(value);
// leading sign indicator
leadingSign(sb, neg); // 就是这里给返回字符串拼上 "-"
......
......
LeadingSignは記号を綴る方法です
private StringBuilder leadingSign(StringBuilder sb, boolean neg) {
if (!neg) {
if (f.contains(Flags.PLUS)) {
sb.append('+');
} else if (f.contains(Flags.LEADING_SPACE)) {
sb.append(' ');
}
} else {
if (f.contains(Flags.PARENTHESES))
sb.append('(');
else
sb.append('-');
}
return sb;
}
Flags.PLUSは、「+」とプラス記号です。表示する正の数はdoubleのみ、Flags.PARENTHESESは括弧を追加し、表示する負の数はdoubleのみです。
遊べる
System.out.println(String.format("%(.2f", -0.001)); // (0.00)
System.out.println(String.format("%+.2f", 0.001)); // +0.00
ビジネスシナリオで、正の数は+を、負の数は()を括弧で囲むことができる場合、これは便利です。
System.out.println(String.format("%+(.2f", 0.001)); // +0.00
System.out.println(String.format("%+(.2f", -0.001)); // (0.00)