我需要从用户输入数字作为字符串并将其解析为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 当我调试时,我发现它是一个解析问题(显而易见),但不知道解决它的好习惯是什么。
答案 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,请在评论中告诉我。