[Java]フォーマッタはDoubleを小数点以下2桁のみの文字列に変換します

最初の便宜のために、それを取るだけです

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)

 

おすすめ

転載: blog.csdn.net/qq_28033719/article/details/113845416