首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java DecimalFormat问题

Java DecimalFormat问题
EN

Stack Overflow用户
提问于 2010-07-14 23:27:49
回答 1查看 2.6K关注 0票数 2

我想用Java中的德语区域设置格式化双精度类型的数字。但是,由于以下代码的输出为: 0.0,因此出现了一些错误

代码语言:javascript
复制
package main;

import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.text.ParseException;
import java.util.Locale;

public class Test {

    private static String decimal2Format = "000.000"; 

    public static void main(String args[]){
        DecimalFormat format = (DecimalFormat)NumberFormat.getInstance(new Locale("de"));
        double value = 0;
        try {
            format.applyPattern(decimal2Format);
            value = format.parse("0.459").doubleValue();
        } catch (ParseException e) {
            e.printStackTrace();
        }

        System.out.println(value);
    }

}

你知道哪里出了问题或遗漏了什么吗?

谢谢,阿提库斯

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-07-14 23:32:01

您正在尝试使用一个模式进行解析,该模式需要一个逗号(就像在德语中一样),但是您给它指定了一个句号("0.459")。看起来DecimalFormat在看到一个不理解的字符时会停止解析。如果您将其更改为“0.459,459”,您将看到它被正确解析,然后输出“0459”。(我不确定System.out.println是否使用系统默认区域设置,在这种情况下,它可能会根据您的区域设置打印"0,459“。)

注意,在这段代码中,您根本没有尝试格式化数字--只是解析一个数字。如果你想格式化它,调用format。double本身没有关联的格式-它只是一个数字。这与使用特定格式化程序进行解析不同,它会返回保留该格式的值。

下面的代码将执行双精度值的实际格式化:

代码语言:javascript
复制
DecimalFormat format = (DecimalFormat)NumberFormat.getInstance(new Locale("de"));
double value = 0.459;
String formatted = format.format(value);
System.out.println(formatted); // Prints "0,459"

编辑:好的,听起来你是在把它从一种格式转换成另一种格式(例如,从美国到欧洲)。这意味着您可能应该使用两个不同的DecimalFormat对象-您可以在调用之间切换区域设置,但对我来说这听起来有点可怕。

我认为解析和检测错误的一种方法是使用parse重载,它也需要一个ParsePosition。首先将位置设置为0,然后检查它是否在字符串的末尾-如果不是,这意味着解析实际上已经失败了。我发现奇怪的是,没有一种方法可以自动执行此操作并抛出异常,但我看不到这样的方法……

如果您要处理逻辑上更接近十进制的值,您可能还希望将解析器设置为生成BigDecimal而不是double。您可以使用setParseBigDecimal方法来完成此操作。

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

https://stackoverflow.com/questions/3247726

复制
相关文章

相似问题

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