Java Can';在某些设备上无法解析双精度
我正在使用一个Java Can';在某些设备上无法解析双精度,java,android,Java,Android,我正在使用一个NumberTextWatcher对EditText进行实时编辑,它对我来说工作得很好, 但是一些用户报告他们遇到了NumberException问题,我认为这是因为在EditText中123456中的数字发生了变化,无法解析为双精度,所以我做了一些更改并使用Replace(“,”,”)代码,但这对一些人来说也不起作用! 我应该怎么做才能让这段代码适用于我的所有用户? 感谢并为我糟糕的英语道歉:D NumberExtWatcher: 问题可能是其他用户可能输入了格式错误的数字。因此
NumberTextWatcher
对EditText
进行实时编辑,它对我来说工作得很好,
但是一些用户报告他们遇到了NumberException
问题,我认为这是因为在EditText
中123456中的数字发生了变化,无法解析为双精度,所以我做了一些更改并使用Replace(“,”,”)
代码,但这对一些人来说也不起作用!
我应该怎么做才能让这段代码适用于我的所有用户?
感谢并为我糟糕的英语道歉:D
NumberExtWatcher:
问题可能是其他用户可能输入了格式错误的数字。因此,您只是将逗号替换为空格。也许你应该替换所有非数字字符
amount1 = amount.getText().toString().replaceAll("[^\\d]", "");
或者,如果希望它们保留小数点,请使用以下命令:
amount1 = amount.getText().toString().replaceAll("[^\\d.]", "");
程序以独立于语言环境的方式存储和操作数字。在显示或打印数字之前,程序必须将其转换为区域设置敏感格式的字符串。例如,在法国,数字123456.78的格式应为123 456,78,而在德国,数字应显示为123.456,78。所以你不能只替换“,”和“.” 下面的代码是关于如何使用美国用户的当前货币从double和back转换的示例
import java.text.NumberFormat;
import java.text.ParseException;
import java.util.Currency;
import java.util.Locale;
public class Test
{
public static void main(String[] args)
{
Locale currentLocale = Locale.getDefault();
Currency currentCurrency = Currency.getInstance(currentLocale);
Double currencyAmount = new Double(9876543.21);
NumberFormat currencyFormatter =
NumberFormat.getCurrencyInstance(currentLocale);
System.out.println(NumberFormat.getNumberInstance(currentLocale));
System.out.println(
currentLocale.getDisplayName() + ", " +
currentCurrency.getDisplayName() + ": " +
currencyFormatter.format(currencyAmount));
try
{
System.out.println(currencyFormatter.parseObject("$9,876,543.21"));
}
catch (ParseException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
您还可以做什么:*确保用户输入的数字格式正确。例如,您不应该看到除数字、.+-$之外的任何其他字符,等等
*如果您知道用户将始终输入两个十进制数字,例如,10美元将表示为10.00(或10,00),那么您可以安全地删除所有“,”和“.”,并通过将其除以100获得原始数字,但请记住也要删除空格(请记住法国:)
另外,请查看文档:在某些设备上无法解析Double??真正地这与设备无关。是的!这段代码在我的LG G2上运行良好,但我收到报告说它在Galaxy S4或Xperia Z1等设备上不起作用。它不会是双重解析。它将是输入解析器的值。或者别的什么。
amount1 = amount.getText().toString().replaceAll("[^\\d.]", "");
import java.text.NumberFormat;
import java.text.ParseException;
import java.util.Currency;
import java.util.Locale;
public class Test
{
public static void main(String[] args)
{
Locale currentLocale = Locale.getDefault();
Currency currentCurrency = Currency.getInstance(currentLocale);
Double currencyAmount = new Double(9876543.21);
NumberFormat currencyFormatter =
NumberFormat.getCurrencyInstance(currentLocale);
System.out.println(NumberFormat.getNumberInstance(currentLocale));
System.out.println(
currentLocale.getDisplayName() + ", " +
currentCurrency.getDisplayName() + ": " +
currencyFormatter.format(currencyAmount));
try
{
System.out.println(currencyFormatter.parseObject("$9,876,543.21"));
}
catch (ParseException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}