如何将带有小数点分隔符逗号和点的字符串解析为 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 来做,请在评论中告诉我。
我需要从用户输入数字作为字符串并将其解析为 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 来做,请在评论中告诉我。