十进制数转换为Java中的utf-8有理数



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

假设我在一个长文本中有"AMZN 2½22",我必须在java swing文本窗格中突出显示,但我在下面的三个变量中有值

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

感谢

以下是如何打印符号'half':

String half = "u20BD";
System.out.println("2" + half);

确定一个数字是否是整数加一半留给读者练习。

您可以用正则表达式交换.0个替换(想到replaceAll("\.[^1-9]+",""),您可以将替换移动到映射或实用程序类,只有当Float.parseFloat(var)不抛出NumberFormatException时才会发生替换。。。

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

实数有两种选择: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);

对于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

相关内容

  • 没有找到相关文章

最新更新