0

我想将 2.5 更改为 2½。不知道如何改变它。

假设我在长文本中有“AMZN 2½ 22”,我必须在 java swing textpane 中突出显示,但我在三个变量中有值,如下所示

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

实数有两种选择:double(实数的近似值)或 BigDecimal(保持精度)。

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);

对于双精度,您实际上没有任何控制,但您可以使用“%.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 回答
0

您可以用正则表达式交换 .0 替换(replaceAll("\\.[^1-9]+",""想到),您可以将替换移动到地图或实用程序类,仅在 Float.parseFloat(var) 不抛出 NumberFormatException 时才发生它们...

但是没有真正更好的方法来进行这种任意替换。这些 un​​icode 字符串与您可以使用的它们所代表的数字没有内在联系。

于 2014-09-15T12:02:14.187 回答