Ali*_*Ali 7 java android numberformatexception arabic-support
使用阿拉伯数字Integer.valueOf("?")返回整数 1 但Float.valueOf("?")orFloat.parseFloat("?")抛出NumberFormatException而如果使用英语数字则不会抛出任何异常Float.valueOf("1"),这是java中的错误还是有一些解释?
我怎样才能解析这样的数字?
我在 android 环境中工作;
似乎Float.parseFloat()不支持东方阿拉伯数字。或者,您可以使用NumberFormat类:
Locale EASTERN_ARABIC_NUMBERS_LOCALE = new Locale.Builder()
.setLanguage("ar")
.setExtension('u', "nu-arab")
.build();
float f = NumberFormat.getInstance(EASTERN_ARABIC_NUMBERS_LOCALE)
.parse("???")
.floatValue();
System.out.println(f);
Run Code Online (Sandbox Code Playgroud)
输出:
1.5
Run Code Online (Sandbox Code Playgroud)
小智 5
不Float.valueOf("\xdb\xb1")检查不同的语言或字符,它只检查数字0-9。Integer.valueOf使用Character.digit()获取字符串中每个数字的值。
我用 Intellij 调试器调试了该语句Float.valueOf("\xdb\xb1")。如果您深入研究 FloatingDecimal.java,您会发现以下代码确定应将哪个字符计为数字:
digitLoop:\n while (i < len) {\n c = in.charAt(i);\n if (c >= \'1\' && c <= \'9\') {\n digits[nDigits++] = c;\n nTrailZero = 0;\n } else if (c == \'0\') {\n digits[nDigits++] = c;\n nTrailZero++;\n } else if (c == \'.\') {\n if (decSeen) {\n // already saw one ., this is the 2nd.\n throw new NumberFormatException("multiple points");\n }\n decPt = i;\n if (signSeen) {\n decPt -= 1;\n }\n decSeen = true;\n } else {\n break digitLoop;\n }\n i++;\n }\nRun Code Online (Sandbox Code Playgroud)\n正如您所看到的,没有检查不同的语言,它只检查数字0-9。
在逐步执行的同时Integer.valueOf,
public static int parseInt(String s, int radix)
使用s = "\xdb\xb1"和执行radix = 10。
然后调用 parseInt 方法Character.digit(\'\xdb\xb1\',10)来获取 的数字值1。
| 归档时间: |
|
| 查看次数: |
284 次 |
| 最近记录: |