[英]How do I convert a String to Double in GWT using a specific locale?
[英]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);
这甚至适用于科学记数法,带百分号的字符串或带货币符号的字符串。
这是使用parseDouble
将String
转换为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.