如何对 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?