2017-02-22 4 views
-1

У меня есть следующий код:Как получить parseDouble игнорировать "%" - Java

preferredCustomers[count]=new PreferredCustomer(fileData[1],fileData[2],Integer.parseInt(fileData[0]),Double.parseDouble(fileData[3]),(Double.parseDouble(fileData[4]))); 

, который будет читать строку:

778234 Минни Маус 165,50 5%

в текстовом документе. Моя проблема заключается в том, что, когда я пытаюсь скомпилировать свою программу, я получаю следующее сообщение об ошибке:

run: 
java.lang.NumberFormatException: For input string: "5%" 
    at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2043) 
    at sun.misc.FloatingDecimal.parseDouble(FloatingDecimal.java:110) 
    at java.lang.Double.parseDouble(Double.java:538) 
    at customer.Main.main(Main.java:84) 
BUILD SUCCESSFUL (total time: 0 seconds) 

Я не могу изменить способ форматирования текста документа, а соответствующий класс имеет следующее:

public class PreferredCustomer extends Customer { 

    // Member variable discount 
    double discountPercentage; 

    // Default constructor 
    public PreferredCustomer() { 
     super(); 
    } 

    // Parameterized overloaded constructor 
    // Constructor chaining calling parent class constructor 
    public PreferredCustomer(String first_name, String last_name, int guestID, double amountSpent, double discountPercentage) { 
     super(first_name, last_name, guestID, amountSpent); 
     //discountPercentage = discountPercentage.replace("%", ""); 
     this.discountPercentage = discountPercentage; 
     // TODO Auto-generated constructor stub 
    } 

    // Getter and setter 
    public double getDiscountPercentage() { 
     return discountPercentage; 
    } 

    public void setDiscountPercentage(double discountPercentage) { 
     this.discountPercentage = discountPercentage; 
    } 

Как могу ли я переписать код, чтобы игнорировать этот знак «%», чтобы он мог компилировать программу? Я бегу в NetBeans, спасибо.

+0

Вы слышали о [ 'подстроки()'] (https://docs.oracle.com/javase/8/docs/api/java/lang/String.html#substring-int-int-)? – Andreas

+0

Не используйте его. Используйте 'java.text.DecimalFormat.parse()'. – EJP

+0

Просто вырежьте '%' перед разбором. – Carcigenicate

ответ

0

В вы код у вас

public PreferredCustomer(..., double discountPercentage) { 
    //discountPercentage = discountPercentage.replace("%", ""); 

, но к этому времени было уже слишком поздно, как это было ожидающей значение быть двойной

но когда вы вызываете этот конструктор вы можете do a replace по значению String в main

eg

String strVal = fileData[4].replace("%", ""); 
double pc1 = Double.parseDouble(strVal); 
new PreferredCustomer(fileData[1],fileData[2],Integer.parseInt(fileData[0]), 
     Double.parseDouble(fileData[4]),pc1)); 
Смежные вопросы