如何将带有小数点分隔符逗号和点的字符串解析为 Double

How to parse String, with both decimal separators comma and dot as well, to Double

我需要从用户输入数字作为字符串并将其解析为 Double 对象。

我希望它可以用逗号作为小数点分隔符,也可以用点来保存它并只用点输出。

示例:22,33-->22.33 和 22.33-->22.33

我用的是:

NumberFormat format = NumberFormat.getInstance(Locale.FRANCE);
        try {
            Number number = format.parse(formDto.getWeight());
            kitten.setWeight(number.doubleValue());
        } catch (ParseException e) {
            e.printStackTrace();
        }

但它只能获取带有“,”分隔符的值。当用户用点输入时,它会丢失所有小数点和 returns 即 22.33 -->22.0 或 4.1 --> 4.0 当我调试时,我发现这是一个解析问题(很明显),但不知道解决它的好的做法是什么。

您可以替换点“.”在解析之前使用逗号 :"。

NumberFormat format = NumberFormat.getInstance(Locale.FRANCE);
    try {
        Number number = format.parse(formDto.replace('.', ',').getWeight());
        kitten.setWeight(number.doubleValue());
    } catch (ParseException e) {
        e.printStackTrace();
    }

尝试一下:

NumberFormat format = NumberFormat.getInstance(Locale.FRANCE);
        try {
           Number number = Double.parseDouble(format.replace(",", ".").getWeight());
            kitten.setWeight(number.doubleValue());
        } catch (ParseException e) {
            e.printStackTrace();
        }

谢谢。

正如 Mohit Thakur 所说,但可以编译。

NumberFormat format = NumberFormat.getInstance(Locale.FRANCE);
try {
    Number number = format.parse(formDto.getWeight().replace('.', ','));
    kitten.setWeight(number.doubleValue());
} catch (ParseException e) {
    e.printStackTrace();
}

如果您只想将 String 转换为 Double 值,则可以使用以下方法完成

String numberStr1 = "22,33"; //number with comma as decimal separator
String numberStr2 = "22.33"; //number with dot as decimal separator

System.out.println(numberStr1.contains(",") ? Double.valueOf(numberStr1.replace(',', '.')):Double.valueOf(numberStr1));
System.out.println(numberStr2.contains(",") ? Double.valueOf(numberStr2.replace(',', '.')):Double.valueOf(numberStr2));

我已经使用 Java 三级运算符来完成这个任务。您可以存储双精度值而不是打印到屏幕。

如果这没有帮助,或者您想专门用 NumberFormat 来做,请在评论中告诉我。