繁体   English   中英

如何使用特定语言环境在Java中将字符串转换为Double?

[英]How do I convert a String to Double in Java using a specific locale?

我想将一些以字符串形式获得的数字转换为Doubles,但是这些数字不在美国标准语言环境中,而是在另一种语言环境中。 我怎样才能做到这一点?

尝试使用java.text.NumberFormat 从Javadocs:

要为其他语言环境设置数字格式,请在对getInstance的调用中将其指定。

 NumberFormat nf = NumberFormat.getInstance(Locale.FRENCH); 

您还可以使用NumberFormat解析数字:

 myNumber = nf.parse(myString); 

parse()返回一个Number 为了获得double myNumber.doubleValue() ,必须调用myNumber.doubleValue()

    double myNumber = nf.parse(myString).doubleValue();

请注意, parse()绝不会返回null ,因此不会导致NullPointerException 相反,如果parse失败,则parse抛出一个检查的ParseException

编辑:我最初说过,还有另一种转换为double :将结果转换为Double并使用拆箱。 我以为,由于使用了NumberFormat的通用实例(针对getInstance的Javadocs),它将始终返回Double 但是DJClayworth指出parse(String, ParsePosition) (由parse(String)调用parse(String, ParsePosition)的Javadocs表示,如果可能,则返回Long 因此, 将结果强制转换为Double是不安全的,不应尝试!
谢谢,DJClayworth!

NumberFormat是一种解决方法,但是您应该意识到它的特殊性,当您的数据不足100%正确时,这些特殊性就会出现。

我发现以下有用:

http://www.ibm.com/developerworks/java/library/j-numberformat/index.html

如果您的输入可以信任,那么您不必担心。

只是学习Java和编程。 有类似的问题。 在我的教科书中发现了以下内容:

Scanner sc = new Scanner(string);
double number = sc.nextDouble();

这本书说,扫描程序会自动解码String variabel中的内容,而Scanner类会自动适应设置的Locale的语言,系统Locale是默认的语言,但这很容易设置为其他语言。

我这样解决了我的问题。 也许这可以解决上述问题而不是解析?

另外:我喜欢这种方法的原因是这样的事实:当使用摆动拨号框进行输入,然后尝试通过解析将字符串转换为double时,出现了NumberFormatException。 事实证明,解析仅使用美国数字格式,而Scanner可以处理所有格式。 即使使用逗号(,)小数点分隔符,扫描仪也可以使输入正常运行。 由于投票最多的答案使用了解析,所以我真的不知道它将如何解决这个特定问题。 您将必须以美国格式输入数字,然后将其转换为您的区域设置格式。 当数字键盘上装有逗号时,这非常不便。

现在你们都可以把我切成碎片了;)

您使用NumberFormat 是一个例子,我认为看起来是正确的。

使用java.text.DecimalFormat应该没有问题。

使用NumberFormat.getNumberInstance(Locale)

您知道这是哪个语言环境吗? 那你可以用

DecimalFormat format = DecimalFormat.getInstance(theLocale);
format.parse(yourString);

这甚至适用于科学记数法,带百分号的字符串或带货币符号的字符串。

这是使用parseDoubleString转换为Double

doubleExample.java

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader; 

public class doubleExample {

        public static void main(String[] args) {

                Double myDouble = new Double("0");
                System.out.println("Please enter a number:");

                try
                {
                        //get the number from console
                        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
                        myDouble = Double.parseDouble(br.readLine());
                }
                //if invalid value was entered
                catch(NumberFormatException ne)
                {
                        System.out.println("Invalid value" + ne);
                        System.exit(0);
                }
    catch(IOException ioe)
                {
                        System.out.println("IO Error :" + ioe);
                        System.exit(0);
                }

                System.out.println("Double value is " + myDouble);
        }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM