Dan*_*ral 38 java localization
我想将我得到的一些数字转换为双打,但这些数字不是美国标准语言环境,而是另一个数字.我怎样才能做到这一点?
Mic*_*ers 64
试试java.text.NumberFormat.来自Javadocs:
要格式化不同Locale的数字,请在对getInstance的调用中指定它.
Run Code Online (Sandbox Code Playgroud)NumberFormat nf = NumberFormat.getInstance(Locale.FRENCH);您还可以使用NumberFormat来解析数字:
Run Code Online (Sandbox Code Playgroud)myNumber = nf.parse(myString);
parse()返回Number; 所以要得到一个double,你必须打电话myNumber.doubleValue():
double myNumber = nf.parse(myString).doubleValue();
Run Code Online (Sandbox Code Playgroud)
注意parse()永远不会返回null,所以这不会导致NullPointerException.相反,如果失败则parse抛出一个检查ParseException.
编辑:我原来说有另一种转换方式double:将结果转换为Double并使用拆箱.我认为,由于NumberFormat正在使用的通用实例(根据Javadocs getInstance),它总是会返回一个Double.但DJClayworth指出,Javadocs parse(String, ParsePosition)(被称为parse(String))表示Long如果可能的话返回a .因此,投射结果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();
Run Code Online (Sandbox Code Playgroud)
这本书说扫描器会自动解码字符串变量中的内容,并且 Scanner 类会自动适应设置的语言环境,系统语言环境是默认设置,但很容易设置为其他内容。
我这样解决了我的问题。也许这可以解决上述问题而不是解析?
补充:我喜欢这种方法的原因是,当使用 Swing 对话框进行输入,然后尝试使用解析将字符串转换为 double 时,我得到了一个 NumberFormatException。原来 parse 只使用 US-number 格式,而 Scanner 可以处理所有格式。即使使用逗号 (,) 小数点分隔符,扫描仪也使输入工作完美无缺。由于投票最多的答案使用 parse 我真的不知道它会如何解决这个特定问题。您必须以美国格式输入您的数字,然后将它们转换为您的语言环境格式。当数字键盘带有逗号时,这很不方便。
现在你们都可以把我撕成碎片了 ;)
| 归档时间: |
|
| 查看次数: |
42733 次 |
| 最近记录: |