如何在Java中将字符串'$ 1400.00'转换为int 1400.00

时间:2019-09-05 00:25:20

标签: java

有人可以帮我在Java中将具有数字和字符的字符串转换为整数吗?

例如,我想将一个字符串金额= $ 100.00转换为一个整数。

我尝试使用integer.parseInt();,但出现错误。

String Checkamount = $1400.00; //Convert web element to string.
int intAmount = Integer.parseInt(Checkamount);

预期结果:1400.00

错误消息

  

线程“主”中的异常java.lang.NumberFormatException:对于输入字符串:“ $ 1,400.00”           在java.base / java.lang.NumberFormatException.forInputString(NumberFormatException.java:68)

6 个答案:

答案 0 :(得分:1)

首先,1400.00不能转换为int,因为它具有小数位。您需要使用变量类型doublefloat来存储此值。

在转换为数字之前,请使用Java的replace()替换掉不需要的字符。例如。

amount = amount.replace('$', '').replace(',', '');
double doubleAmount = Double.parseDouble(amount);

有一种更干净的方法来使用适当的正则表达式进行替换,但这应该可行。

答案 1 :(得分:0)

import java.util.regex.Pattern;
import java.util.Locale;
import java.math.BigDecimal;
import java.text.ParseException;
import java.text.NumberFormat;
import java.text.DecimalFormat;
public class DollarToInt{
    public static void main(String[] args) throws ParseException{
        //Method 1 --> ERROR WHEN \n incl
        String amount="$1,32423410.00"; 
        amount=amount.replace("$", "").replace(",", "");
        double toDouble= Double.parseDouble(amount);

        //Method 2 --> IGNORES \n
        String amount2 = "$1,2131000.00";
        DollarToInt method2= new DollarToInt();
        BigDecimal toBigDecimal=method2.parse(amount2, Locale.US);

        //Method 3 -> WHEN \n incl REMOVES VALUES RIGHT OF \n
        Double toDouble3= NumberFormat.getCurrencyInstance(Locale.US).parse("$1, 400.00").doubleValue();

        System.out.println(toDouble); //M1
        System.out.println(toBigDecimal); //M2
        System.out.println(toDouble3); //M3
    }

     public BigDecimal parse(final String amount, final Locale locale) throws ParseException {
        final NumberFormat format = NumberFormat.getNumberInstance(locale);
        if (format instanceof DecimalFormat) {
            ((DecimalFormat) format).setParseBigDecimal(true);
        }
        return (BigDecimal) format.parse(amount.replaceAll("[^\\d.,]",""));
    }
}

我尝试了两种解析美元格式的方法,我认为方法2更好,并且是更好的方法。 请参阅:Converting different countrys currency to double using java

答案 2 :(得分:0)

使用子字符串。

String value = amount.substring(1,amount.length());

“值”现在将仅存储不带美元符号的数字。

 double doubleAmount = Double.parseDouble(value);

我认为这会有所帮助。

答案 3 :(得分:0)

此处1400.00的内容无法转换为int。 但是,如果您希望不带小数点,那么这里是完整的解决方案

    String amount = "$1400.00";
    amount = amount.replace('$', ' ');
    int intAmount= (int)Double.parseDouble(amount);

答案 4 :(得分:0)

一种可能的解决方案是利用NumberFormat-唯一的限制是确保您使用适当的Locale

例如...

NumberFormat formatter = NumberFormat.getCurrencyInstance(Locale.US);
try {
    Number number = formatter.parse("$1000.40");
    System.out.println(number);
    System.out.println(number.intValue());
    System.out.println(number.doubleValue());
} catch (ParseException ex) {
    Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);
}

将打印

1000.4
1000
1000.4

您也可以输入$1,000.40,它会为您提供相同的结果。

同样,需要注意的是,NumberFormatter将期望输入与输出相同。例如,上面的NumberFormatter将输出1000.6的双精度值作为$1,000.60

答案 5 :(得分:0)

  • 金额不得存储在Integer中。
  • 存入BigDecimal中以保持准确性。 (ref

要使用货币字符串,可以将NumberFormatlocale一起使用。

public static void main(String[] args) {
    Locale locale = new Locale("en", "US");

    NumberFormat currencyFormat = NumberFormat.getCurrencyInstance(locale);

    try {
        String input = "$123,456,56.2";
        Number money = currencyFormat.parse(input);
        BigDecimal moneyAmount = BigDecimal.valueOf(money.doubleValue());
        //Do whatever you want with money amount here.
    } catch (ParseException pe) {
        pe.printStackTrace();
    }
}