Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/185.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 Can';在某些设备上无法解析双精度_Java_Android - Fatal编程技术网

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();
        }
    }
}