我想改变2.5到2½。不知道如何改变它。
假设我在长文本中有“AMZN2½22”,我必须在java swing textpane中突出显示,但我在三个变量中有值,如下所示
A = AMZN
B = 2.5
C = 22
基于这个值,我将无法匹配如此将B更改为Rational数字(String)然后匹配并且它工作正常但我不想这样做......它只是一个临时修复。
有人可以帮助我吗?
B = B.toString().replace(".25", "¼")
.replace(".5", "½")
.replace(".75", "¾")
.replace(".375", "⅜")
.replace(".625", "⅜")
.replace(".125", "⅛")
.replace(".875", "⅞")
.replace(".0", "")
.replace(".000", "")
.replace(".00", "");
由于
答案 0 :(得分:0)
以下是打印符号'half'的方法:
String half = "\u20BD";
System.out.println("2" + half);
确定一个数字是一个整数加一半是留给读者的练习。
答案 1 :(得分:0)
你可以交换.0替换正则表达式(replaceAll("\\.[^1-9]+",""
会想到),你可以将替换移动到地图或实用程序类,只有当Float.parseFloat(var)不抛出时才会发生它们NumberFormatException ...
但是没有真正更好的方法来进行这种任意替换。那些unicode字符串与它们代表的数字没有内在的联系。
答案 2 :(得分: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);
对于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
。