gpt4 book ai didi

Java DecimalFormat问题

转载 作者:行者123 更新时间:2023-12-02 08:56:57 31 4
gpt4 key购买 nike

我想在 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”。)

请注意,在此代码中您根本没有尝试格式化数字 - 只是解析一个数字。如果要格式化,请调用format。 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 方法来执行此操作。

关于Java DecimalFormat问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3247726/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com