读取双精度值会返回零而不是实际值

我正在尝试读取具有帐号和余额的文本文件。我正在读的帐号是一个字符串,余额是一个双,但是我得到的余额全为零,而不是实际值。

文件的外观如下:

package Bank;

import java.util.Scanner;
import java.io.printstream;
import ui.UIAuxiliaryMethods;

class Bank {

    printstream out;

     Bank() { 
            out = new printstream(System.out); 
            }

     void readFileIn() {
         Scanner fileScanner = UIAuxiliaryMethods.askUserForInput().getScanner();
         while(fileScanner.hasnext()) {
             String account = fileScanner.nextLine();
             readLine(account);
         }
     }

     void readLine(String account) {
         String[] part1 = account.split(" ");
         String account = part1[0];
         String balance1 = part1[1];
         Scanner Balance = new Scanner(balance1);
         double balance = 0;
         double count1 = 0;
         while(Balance.hasnext()) {
             balance += Balance.nextDouble();
             count1++;
         }
             accounts line = new accounts(account,balance);
             out.printf("%s %.2f \n",line.account,line.balance);
         }

     void start() {
            readFileIn();
        }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        new Bank().start();
    }

}

package Bank;

class accounts {

    String account;
    double balance;

    accounts(String account,double balance){

        this.account = account;
        this.balance = balance;
    }

}

第二列是余额。

下面是我的代码,带有额外的类来存储带有余额的帐户:

0015 0,00 
0020 0,00 
0034 0,00 
0069 0,00 
0085 0,00 
0091 0,00 
0128 0,00 
0129 0,00 
0135 0,00 
0189 0,00

我得到的结果如下:

package TaxWithMethods_70011855;

import java.util.Scanner;

public class TaxWithMethods_70011855 {
    public static final double MPF_RATE = 0.05;
    public static final double PERSONAL_ALLOWANCE = 120000;
    public static final double TAX_RATE = 0.1;

    public static void main(String[] args) {
        double MI;
        Scanner sc = new Scanner(System.in);

        System.out.println("What is your monthly income?");
        MI = sc.nextDouble();

        double Income = Income(MI);
        double Al= Allowance(Income);
        double Tax = Tax(Income,Al);
        System.out.println("Income: " + Income);
        System.out.println("Allowances & Deductions: " + Al);
        System.out.println("Tax: " + Tax);
    }

    public static double Income ( double MI ) {
        double Income2 = MI*12;
        return Income2;
    }

    public static double Allowance ( double Income) {
        double Al = PERSONAL_ALLOWANCE + Income * MPF_RATE;
        return Al;
    }

    public static double Tax ( double Income,double Al){
        double tax = (Income - Al) * TAX_RATE;
        return tax;
    }
}

有什么办法可以解决这个问题,以便获得实际余额?

qf201319 回答:读取双精度值会返回零而不是实际值

您可以简单地使用Scanner来获取第二列的值,而不是使用额外的Double.parseDouble()

void readLine(String Account) {
    String[] part1 = Account.split(" ");
    String account = part1[0];
    double balance = Double.parseDouble(part1[1]);
    Accounts line = new Accounts(account,balance);

    ...
}

如果列未用单个空格分隔,则最好使用更通用的分隔符,例如split("\\s+"),它将接受多个空格和制表符。

,

使用split(" +")或更好的split("\\s+")在空白处(也可以使用制表符)分割多次,至少一次。同样,hasNextLine/hasNextDoublehasNext还好。

事实上:

     String[] part1 = Account.split("\\s+");
     String account = part1[0];
     String balance1 = part1[1];
     double balance = Double.parseDouble(balance1);
,

两个值之间有几个空格。例如,"0015 112.34".split(" ")变为{"0015","","112.34"},并且当您使用索引1时,您只会得到一个空字符串。您应该按照整个空白序列来分隔行,例如account.split("\\s+")(使用正则表达式)。

还请注意,您不需要扫描程序即可找到double值。您可以只使用Double.valueOf(balanceAsString)。请记住,按照惯例,所有变量名都应以小写字母开头。

本文链接:https://www.f2er.com/3167810.html

大家都在问