为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

偶然的你 2024-01-28 17:08:43
我正在尝试读取包含帐号和余额的文本文件。我以字符串形式读取帐号,以双精度形式读取余额,但我得到的余额全为零,而不是实际值。该文件如下所示:0015      112.340020     4000.000034     9345.890069      723.500085     1500.000091     8237.310128       29.750129     -483.140135     2908.830189    10045.900251     5700.10第二列是余额。我的代码,带有额外的类来存储带有余额的帐户,如下所示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有什么办法可以解决这个问题,以便我获得实际余额吗?
查看完整描述

3 回答

?
森栏

TA贡献1810条经验 获得超5个赞

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+")可接受多个空格和制表符。


查看完整回答
反对 回复 2024-01-28
?
慕码人8056858

TA贡献1803条经验 获得超6个赞

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

另请注意,您不需要扫描仪来查找双精度值。你可以只使用Double.valueOf(balanceAsString). 请记住,按照惯例,所有变量名称都应以小写字母开头。


查看完整回答
反对 回复 2024-01-28
?
慕尼黑5688855

TA贡献1848条经验 获得超2个赞

使用split(" +")或 更好地split("\\s+")在空白处(也包括制表符)进行多次分割,至少一次。也hasNextLine/hasNextDouble比hasNext.


实际上:


     String[] part1 = Account.split("\\s+");

     String account = part1[0];

     String balance1 = part1[1];

     double balance = Double.parseDouble(balance1);


查看完整回答
反对 回复 2024-01-28
  • 3 回答
  • 0 关注
  • 33 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信