0

2.5 を 2½ に変更したい。変更方法がわかりません。

長いテキストに「AMZN 2½ 22」があり、Java Swing テキストペインで強調表示する必要がありますが、以下のように 3 つの変数に値があるとします。

A = AMZN
B = 2.5
C = 22

この値に基づいて一致させることはできないため、B を有理数 (文字列) に変更してから一致させると、正常に機能しますが、これはしたくありません... これは単なる一時的な修正です。

誰かが私を助けることができますか?

B = B.toString().replace(".25", "¼")
                        .replace(".5", "½") 
                        .replace(".75", "¾")
                        .replace(".375", "⅜")
                        .replace(".625", "⅜")
                        .replace(".125", "⅛")
                        .replace(".875", "⅞")
                        .replace(".0", "")
                        .replace(".000", "")
                        .replace(".00", "");

ありがとう

4

3 に答える 3

0

.0 置換を正規表現と交換できます (replaceAll("\\.[^1-9]+",""頭に浮かびます)。置換をマップまたはユーティリティ クラスに移動し、Float.parseFloat(var) が NumberFormatException をスローしない場合にのみそれらを発生させます...

しかし、そのような任意の置換を行うための真に優れた方法はありません。これらの Unicode 文字列には、使用できる数値との本質的な関係はありません。

于 2014-09-15T12:02:14.187 に答える
0

実数には、double (実数の近似) または BigDecimal (精度を維持する) の 2 つの選択肢があります。

String a = "AMZN";
BigDecimal b = new BigDecimal("2.5");
double b2 = 2.5;
int c = 22;

// %s = string, %f = floating point, %d = digits, %n = newline.
System.out.printf("%s %f %d%n", a, b2, c);

double の場合、実際には制御できませんが、「%.3f」を使用して出力(printf) をフォーマットし、小数点以下 3 桁の精度にすることができます。

あなたの場合、Unicode の分数を使用して数値を表現したいと考えています。

あまり適していない でそれを行いましょうdouble:

System.out.printf("%s %s %d%n", a, asFraction(b2), c);

static String[] fractionTexts =  { "", "¼", "½", ... }; // Maybe char
static double[] fractionValues = { 0.0, 0.25, .5, ... };

static String asFraction(double x) {
    if (x < 0) {
        return "\u2212" + asFraction(-x); // U+2212 is Unicode minus.
    }
    long integralPart = (long)x;
    double decimalsPart = x - integralPart;

    for (int i = 0; i < fractionValues.length; ++i) {
        if (almostEqual(decimalsPart, fractionValues[i]) {
            decimalPoint = "";
            return MessageFormat("{0}", integralPart) + fractionTexts[i];
        }
    }
    return MessageFormat("{0}", x);
}

private boolean almostEqual(double x, double y) {
    final double EPS = 0.0001;
    return x >= y - EPS && x <= y + EPS;
}

このコードは、桁区切り記号/小数点区切り記号に MessageFormat を使用します。0.0、0.00、0.00ß0 (同じ数値) の場合、明示的に数値を除外します。Java ソース コードは、Java コンパイラと同じエンコーディングである必要があり、¼ など (UTF-8 など) を保持できる必要があります。

エラーベアリングについては、double私が紹介しalmostEqualた.

于 2014-09-15T12:29:50.930 に答える
0

記号「半分」を印刷する方法は次のとおりです。

String half = "\u20BD";

System.out.println("2" + half);

数値が整数プラス半分であるかどうかの判断は、読者の課題として残されています。

于 2014-09-15T11:34:28.047 に答える