我想将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
。