首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何使用特定的语言环境在Java中将字符串转换为双精度?

如何使用特定的语言环境在Java中将字符串转换为双精度?
EN

Stack Overflow用户
提问于 2009-05-20 14:01:46
回答 8查看 46.9K关注 0票数 41

我想把一些字符串形式的数字转换成双精度,但这些数字不是美国标准语言环境,而是不同的语言环境。我该怎么做呢?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2009-05-20 14:04:50

试试java.text.NumberFormat。在Javadoc中:

若要针对不同的区域设置格式化数字,请在调用getInstance时指定该数字。

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

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

myNumber = nf.parse(myString);

parse()返回Number;因此,若要获取double,必须调用myNumber.doubleValue()

代码语言:javascript
代码运行次数:0
运行
复制
    double myNumber = nf.parse(myString).doubleValue();

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

编辑:我最初说过还有另一种方法可以将结果转换为double:将结果转换为Double并使用拆箱。我认为由于使用了一个通用的NumberFormat实例(根据getInstance的Javadoc,它总是返回一个Double。但DJClayworth指出,parse(String, ParsePosition)的Javadoc(由parse(String)调用)表示,如果可能的话,会返回一个Long。因此,将结果转换为 Double 是不安全的,不应该尝试!

谢谢,DJClayworth!

票数 69
EN

Stack Overflow用户

发布于 2009-05-20 14:17:59

NumberFormat是不错的选择,但是你应该意识到当你的数据不是100%正确的时候,它的特性就会出现。

我发现以下内容很有用:

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

如果你的输入是可信的,那么你就不必担心了。

票数 7
EN

Stack Overflow用户

发布于 2014-01-26 12:04:30

只是学习java和编程。也有类似的问题。在我的课本上找到了这样的东西:

代码语言:javascript
代码运行次数:0
运行
复制
Scanner sc = new Scanner(string);
double number = sc.nextDouble();

书中说,扫描器自动解码字符串变量中的内容,scanner类自动适应设置的区域设置的语言,系统区域设置是默认设置,但这很容易设置为其他设置。

我用这种方式解决了我的问题。也许这可以解决上面的问题,而不是解析?

另外:我喜欢这种方法的原因是,当使用swing对话框进行输入,然后尝试使用parse将字符串转换为double时,我得到了一个NumberFormatException。事实证明,parse只使用US-number格式,而Scanner可以处理所有格式。Scanner即使使用逗号(,)十进制分隔符也能完美地输入。由于投票最多的答案是使用parse,我真的看不出它将如何解决这个特定的问题。您必须以美国格式输入数字,然后将其转换为您的区域设置格式。当一个数字键盘带有逗号时,这是相当不方便的。

现在你们可以自由地把我撕成碎片了;)

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/888088

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档