繁体   English   中英

Java DecimalFormat问题

[英]Java DecimalFormat problem

我想在Java中使用德语语言环境格式化double类型的数字。 但是出现问题,因为以下代码的输出是:0.0

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);
    }

}

你有什么想法有什么不对吗?

谢谢,阁楼

你试图使用一个预期逗号的模式进行解析(因为它是德语),但你给它一个句号(“0.459”)。 看起来DecimalFormat在看到它不理解的字符时会停止解析。 如果将其更改为“0,459”,您将看到它正确解析,然后输出“0.459”。 (我不确定System.out.println是否使用系统默认语言环境,在这种情况下,它可能会打印“0,459”,具体取决于您的语言环境。)

请注意,您还没有尝试在此代码中格式化数字 - 只解析一个数字。 如果要格式化,请调用格式。 double本身没有相关的格式 - 它只是一个数字。 它不像使用特定格式化程序进行解析返回保留该格式的值。

这里的代码将执行double值的实际格式化

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方法执行此操作。

暂无
暂无

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

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