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

时间:2016-11-21 11:22:30

标签: java string decimal separator

我需要从用户输入数字作为字符串并将其解析为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();
        }

但它只能获得','分隔器。当用户输入点时,它会丢失所有小数并返回22.33 - > 22.0或4.1 - > 4 当我调试时,我发现它是一个解析问题(显而易见),但不知道解决它的好习惯是什么。

4 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:3)

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

答案 2 :(得分:0)

尝试这样做:

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

感谢。

答案 3 :(得分:0)

如果您只想将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 Tertiary Operator来完成这项任务。您可以存储双值而不是打印到屏幕。

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