如何在java中对具有逗号而不是十进制的数字执行数学运算?

如何在java中对具有逗号而不是十进制的数字执行数学运算?,java,type-conversion,numbers,number-formatting,Java,Type Conversion,Numbers,Number Formatting,假设我有两个字符串“123,21”和“22,41”,我想减去这两个数字,然后用Java返回字符串格式的输出 我无法确定如何使用Number.format()执行此操作 另外,如何将此字符串转换为大小数?首先,您可以按照以下方法使用 然后,您可以简单地使用双重结果创建 通过注释进行各种交换后,这是我的最终答案,允许控制十进制分隔符和分组分隔符: public static final BigDecimal convertToBigDecimal(String stringNumber1, Stri

假设我有两个字符串“123,21”和“22,41”,我想减去这两个数字,然后用Java返回字符串格式的输出

我无法确定如何使用Number.format()执行此操作


另外,如何将此字符串转换为大小数?

首先,您可以按照以下方法使用

然后,您可以简单地使用双重结果创建

通过注释进行各种交换后,这是我的最终答案,允许控制十进制分隔符和分组分隔符:

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);
    }
通过这种方式,您可以根据需要完全控制区域设置和小数分隔符

如果要将coma用作默认的十进制分隔符,可以添加以下重载:

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()方法返回字符串数组

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
我认为使用十进制格式的十进制符号应该允许您使用逗号作为十进制符号


参考

您需要用解析数字,但OP希望将逗号作为十进制分隔符,这不是您的代码所做的。但OP希望将
123,21
22,41
减去为小数。问题不是做
123-21
。嗨,这能解决你的问题吗?嘿@b谢谢你的帮助!一切正常,除了我得到这个异常:java.text.ParseException:不可解析的数字:“1”看,在“1”的开头有一个标题和尾随空格字符;在尝试解析字符串之前,应该对字符串使用trim()方法。我猜仍然缺少一些东西!对于上述locale.FRANCE中的代码,在尝试减去59.998,5和1.399,99时,我得到的输出为58。基本上,它会删除“.”之后的所有内容,并执行59-1=58,因此基本上问题仍然存在!完成。。。我为您编写了一个实用方法,允许您控制一切,并匹配所有情况;)
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);
    }