Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java DecimalFormat在用户具有不同地区时强制使用拉丁数字_Java_Android_Formatting_Number Formatting_Numberformatexception - Fatal编程技术网

Java DecimalFormat在用户具有不同地区时强制使用拉丁数字

Java DecimalFormat在用户具有不同地区时强制使用拉丁数字,java,android,formatting,number-formatting,numberformatexception,Java,Android,Formatting,Number Formatting,Numberformatexception,我试图解析一个浮点,同时使用十进制格式twoDForm来减少十进制数。 要设置小数位数,我已实例化如下: twoDForm = new DecimalFormat("#.##"); Float.valueOf(twoDForm.format(cameraPosition.x) 然后,为了解析浮点值,我调用以下命令: twoDForm = new DecimalFormat("#.##"); Float.valueOf(twoDForm.format(cameraPosition.x)

我试图解析一个浮点,同时使用十进制格式twoDForm来减少十进制数。 要设置小数位数,我已实例化如下:

twoDForm  = new DecimalFormat("#.##");
Float.valueOf(twoDForm.format(cameraPosition.x)
然后,为了解析浮点值,我调用以下命令:

twoDForm  = new DecimalFormat("#.##");
Float.valueOf(twoDForm.format(cameraPosition.x)
在某些情况下,这似乎是基于区域设置抛出的

NumberFormatException: Invalid float: "١٥.٨٦" non latin numbers or font
由于地域和Android设备处理数字和符号的方式的差异,我在NumberFormatException中遇到了几个不同的问题,因此我还向DecimalFormat添加了以下内容:

DecimalFormatSymbols dfs = new DecimalFormatSymbols();
dfs.setDecimalSeparator('.');
dfs.setMinusSign('-');
twoDForm.setDecimalFormatSymbols(dfs);
我已经能够用不同类型的逗号和减号来解决某些情况,但现在我面临着这个问题: java.lang.NumberFormatException:无效浮点:“١٥.٨٦”

当我在谷歌上搜索时,我发现了阿拉伯语书籍的建议,所以我猜这是处理不同语言数字的另一种方式。有没有办法强制使用“常规”数字来避免这种情况,这样我就可以简单地调用相同的Float.valueOf(…),而不必为每个可能的情况添加特定的区域设置


谢谢

该字符串中的字符是1、5、8和6的阿拉伯数字。你需要一个说阿拉伯语的语言环境才能解析它们

以下代码适用于我,并根据需要打印15.86

Locale saudiArabia = new Locale("ar", "SA");
NumberFormat arabicFormat = NumberFormat.getInstance(saudiArabia);
try {
    Number parsed = arabicFormat.parse("١٥.٨٦");
    System.out.println(parsed);
} catch (ParseException e) {
    e.printStackTrace();
}

该字符串中的字符是1、5、8和6的阿拉伯数字。你需要一个说阿拉伯语的语言环境才能解析它们

以下代码适用于我,并根据需要打印15.86

Locale saudiArabia = new Locale("ar", "SA");
NumberFormat arabicFormat = NumberFormat.getInstance(saudiArabia);
try {
    Number parsed = arabicFormat.parse("١٥.٨٦");
    System.out.println(parsed);
} catch (ParseException e) {
    e.printStackTrace();
}

问题在于设备语言是阿拉伯语。如果是这样,自动十进制符号将把拉丁数字转换成阿拉伯数字。最好的方法和最简单的方法是直接设置区域设置:

final DecimalFormatSymbols decimalSymbol = new DecimalFormatSymbols(Locale.US);

问题在于设备语言是阿拉伯语。如果是这样,自动十进制符号将把拉丁数字转换成阿拉伯数字。最好的方法和最简单的方法是直接设置区域设置:

final DecimalFormatSymbols decimalSymbol = new DecimalFormatSymbols(Locale.US);

你对产生异常的文本做了什么?您正在调用什么命令?请注意,以防问题中不清楚-这些符号是阿拉伯数字。
是一个规则句点吗?可能是。阿拉伯零看起来像一个垂直居中的点,所以这可能是一个小数点。在我看来这就像是
15.86
。你对产生异常的文本做了什么?您正在调用什么命令?请注意,以防问题中不清楚-这些符号是阿拉伯数字。
是一个规则句点吗?可能是。阿拉伯零看起来像一个垂直居中的点,所以这可能是一个小数点。所以在我看来这就像是
15.86
。太好了,谢谢!我把我的问题编辑得更具体了,你能看一下吗?有没有办法简单地解释任何类型的语言环境,然后从十进制格式解析字符串?问题是我的用户遍布世界各地,我不知道他们使用的是哪种语言环境。好吧,一旦人们开始回答问题,你不应该真正改变这个问题——这会使他们的答案无效。请记住,堆栈溢出不仅仅适用于您。其他人会从这个问题中受益。但除此之外,为什么要使用
十进制格式
将数字转换为
字符串
,然后使用
Float.valueOf
将其转换回数字?你不能把它作为一个数字,避免所有这些问题吗?是的,但我得到了一个警告,这个问题必须删除,因为它没有正确的表述,我现在问的是我本来想问的,我只是问得非常糟糕。。不管怎么说,这是因为我想限制小数位数,这是我唯一想到的解决办法。所以你真正的问题是如何将一个数字四舍五入到小数位数?而有关区域设置和阿拉伯数字的整个业务都是一条红鲱鱼?不是真的,我已经弄清楚了取整部分,问题是由于某种原因,在一个(在本例中是Android)设备上使用十进制格式,而该设备具有阿拉伯或任何其他区域设置,因此浮点解析失败。太好了,谢谢!我把我的问题编辑得更具体了,你能看一下吗?有没有办法简单地解释任何类型的语言环境,然后从十进制格式解析字符串?问题是我的用户遍布世界各地,我不知道他们使用的是哪种语言环境。好吧,一旦人们开始回答问题,你不应该真正改变这个问题——这会使他们的答案无效。请记住,堆栈溢出不仅仅适用于您。其他人会从这个问题中受益。但除此之外,为什么要使用
十进制格式
将数字转换为
字符串
,然后使用
Float.valueOf
将其转换回数字?你不能把它作为一个数字,避免所有这些问题吗?是的,但我得到了一个警告,这个问题必须删除,因为它没有正确的表述,我现在问的是我本来想问的,我只是问得非常糟糕。。不管怎么说,这是因为我想限制小数位数,这是我唯一想到的解决办法。所以你真正的问题是如何将一个数字四舍五入到小数位数?而有关区域设置和阿拉伯数字的整个业务都是一条红鲱鱼?不是真的,我已经弄清楚了取整部分,问题是由于某种原因,在一个(在本例中是Android)设备上使用十进制格式,而该设备具有阿拉伯或任何其他区域设置,因此浮点解析失败。