如何对 java 中有逗号而不是小数的数字执行数学运算?
How to perform mathematical operation on numbers in java having comma instead of decimal?
假设我有 2 个字符串“123,21”和“22,41”我想减去这两个数字和 return Java.[=11 中字符串格式本身的输出=]
我无法确定如何使用 Number.format() 来执行此操作。
另外,如何将此字符串转换为大十进制数?
首先,您可以按照这种方式使用Number.format()。
然后,您可以简单地用双精度创建 BigDecimal。
经过各种评论交流,这是我的最终答案,允许控制小数分隔符和分组分隔符:
public static final BigDecimal convertToBigDecimal(String stringNumber1, String stringNumber2, char separator, char groupingSeparator)
throws ParseException {
Locale myLocale = Locale.FRANCE;
DecimalFormatSymbols decimalSeparator = new DecimalFormatSymbols(myLocale);
decimalSeparator.setDecimalSeparator(separator);
decimalSeparator.setGroupingSeparator(groupingSeparator);
DecimalFormat format = (DecimalFormat) DecimalFormat.getInstance(myLocale);
format.setDecimalFormatSymbols(decimalSeparator);
Number number1 = format.parse(stringNumber1.trim());
Number number2 = format.parse(stringNumber2.trim());
double substractResult = number1.doubleValue() - number2.doubleValue();
// If you want back a String presentation => String stringFormat = "" +
// substractResult;
return new BigDecimal(substractResult);
}
这样您就可以根据需要完全控制区域设置和小数点分隔符。
如果你想使用逗号作为默认的小数分隔符,你可以添加这个重载:
public final BigDecimal convertToBigDecimal(String stringNumber1, String stringNumber2)
throws ParseException {
return convertToBigDecimal(stringNumber1, stringNumber2, ',', '.');
}
public final BigDecimal convertToBigDecimal(String stringNumber1, String stringNumber2, char separator)
throws ParseException {
return convertToBigDecimal(stringNumber1, stringNumber2, separator, '.');
}
然后您就可以轻松使用这个新功能了
System.out.println(convertToBigDecimal("123,21", "22,41", ','));
System.out.println(convertToBigDecimal("123.21", "22.41", '.'));
System.out.println(convertToBigDecimal("123,441.33", "122,441.22", '.', ','));
System.out.println(convertToBigDecimal("59.998,50", "698,43", ',', '.'));
System.out.println(convertToBigDecimal("59.998,50", "49.998,50", ','));
我认为可以提供具有这种自定义格式的十进制格式,以根据需要将文本转换为整数或双精度数。
public static void main(String[] args) throws ParseException {
String text1 = "123,21";
String text2 = "22,41";
NumberFormat nf_in = new DecimalFormat("###,##");
int number1 = nf_in.parse(text1).intValue();
System.out.println("Number 1 "+number1);
int number2 = nf_in.parse(text2).intValue();
System.out.println("Number2 "+number2);
System.out.println("Subtract Number2 from number 1"+ (number1-number2));
}
您可能想要逗号旁边的值并减去它们。我知道的一种常见且方便的方法是使用 split() 方法,该方法将 return 一个字符串数组。
String text = "123,21";
String[] values = text.split(","); //this will add all the strings before or after a ",".
String answer = (Integer.parseInt(values[0])-Integer.parseInt(values[1])).toString();
System.out.println("Answer: "+answer); //will output 102
public static void main(String[] args) throws ParseException {
String text1 = "123,21";
String text2 = "22,41";
DecimalFormatSymbols decimalFormatSymbols = new DecimalFormatSymbols();
decimalFormatSymbols.setDecimalSeparator(',');
NumberFormat nf_in = new DecimalFormat("##,##",decimalFormatSymbols);
double number1 = nf_in.parse(text1).doubleValue();
System.out.println("Number 1 "+number1*1);
double number2 = nf_in.parse(text2).doubleValue();
System.out.println("Number2 "+number2*1);
double outputvalue = number1 - number2;
System.out.println( outputvalue);
}
我认为使用十进制格式的 DecimalFormatSymbols 应该允许您使用逗号作为小数点符号。
参考Best way to parseDouble with comma as decimal separator?
假设我有 2 个字符串“123,21”和“22,41”我想减去这两个数字和 return Java.[=11 中字符串格式本身的输出=]
我无法确定如何使用 Number.format() 来执行此操作。
另外,如何将此字符串转换为大十进制数?
首先,您可以按照这种方式使用Number.format()。
然后,您可以简单地用双精度创建 BigDecimal。
经过各种评论交流,这是我的最终答案,允许控制小数分隔符和分组分隔符:
public static final BigDecimal convertToBigDecimal(String stringNumber1, String stringNumber2, char separator, char groupingSeparator)
throws ParseException {
Locale myLocale = Locale.FRANCE;
DecimalFormatSymbols decimalSeparator = new DecimalFormatSymbols(myLocale);
decimalSeparator.setDecimalSeparator(separator);
decimalSeparator.setGroupingSeparator(groupingSeparator);
DecimalFormat format = (DecimalFormat) DecimalFormat.getInstance(myLocale);
format.setDecimalFormatSymbols(decimalSeparator);
Number number1 = format.parse(stringNumber1.trim());
Number number2 = format.parse(stringNumber2.trim());
double substractResult = number1.doubleValue() - number2.doubleValue();
// If you want back a String presentation => String stringFormat = "" +
// substractResult;
return new BigDecimal(substractResult);
}
这样您就可以根据需要完全控制区域设置和小数点分隔符。
如果你想使用逗号作为默认的小数分隔符,你可以添加这个重载:
public final BigDecimal convertToBigDecimal(String stringNumber1, String stringNumber2)
throws ParseException {
return convertToBigDecimal(stringNumber1, stringNumber2, ',', '.');
}
public final BigDecimal convertToBigDecimal(String stringNumber1, String stringNumber2, char separator)
throws ParseException {
return convertToBigDecimal(stringNumber1, stringNumber2, separator, '.');
}
然后您就可以轻松使用这个新功能了
System.out.println(convertToBigDecimal("123,21", "22,41", ','));
System.out.println(convertToBigDecimal("123.21", "22.41", '.'));
System.out.println(convertToBigDecimal("123,441.33", "122,441.22", '.', ','));
System.out.println(convertToBigDecimal("59.998,50", "698,43", ',', '.'));
System.out.println(convertToBigDecimal("59.998,50", "49.998,50", ','));
我认为可以提供具有这种自定义格式的十进制格式,以根据需要将文本转换为整数或双精度数。
public static void main(String[] args) throws ParseException {
String text1 = "123,21";
String text2 = "22,41";
NumberFormat nf_in = new DecimalFormat("###,##");
int number1 = nf_in.parse(text1).intValue();
System.out.println("Number 1 "+number1);
int number2 = nf_in.parse(text2).intValue();
System.out.println("Number2 "+number2);
System.out.println("Subtract Number2 from number 1"+ (number1-number2));
}
您可能想要逗号旁边的值并减去它们。我知道的一种常见且方便的方法是使用 split() 方法,该方法将 return 一个字符串数组。
String text = "123,21";
String[] values = text.split(","); //this will add all the strings before or after a ",".
String answer = (Integer.parseInt(values[0])-Integer.parseInt(values[1])).toString();
System.out.println("Answer: "+answer); //will output 102
public static void main(String[] args) throws ParseException {
String text1 = "123,21";
String text2 = "22,41";
DecimalFormatSymbols decimalFormatSymbols = new DecimalFormatSymbols();
decimalFormatSymbols.setDecimalSeparator(',');
NumberFormat nf_in = new DecimalFormat("##,##",decimalFormatSymbols);
double number1 = nf_in.parse(text1).doubleValue();
System.out.println("Number 1 "+number1*1);
double number2 = nf_in.parse(text2).doubleValue();
System.out.println("Number2 "+number2*1);
double outputvalue = number1 - number2;
System.out.println( outputvalue);
}
我认为使用十进制格式的 DecimalFormatSymbols 应该允许您使用逗号作为小数点符号。
参考Best way to parseDouble with comma as decimal separator?