【问题标题】:Parsing string to double - java将字符串解析为双精度 - java
【发布时间】:2012-10-21 09:49:36
【问题描述】:

对于一个项目,我有一个类似于银行的程序。 “银行”读入一个文件,其中包含如下所示的帐户:
米勒
威廉
00001
891692 06 最后一个字符串必须转换为双精度,以便程序可以对其执行加法和减法等计算。
而且我还必须以货币格式打印出来,即 $891692.06

到目前为止我有这个:

 public class Account {
      private String firstName, lastName;
      private int accountID;
      private String currentBalance; 

      private static int maxAccountID;

      public Account(String fN, String lN, int acct, String bal) {
         firstName = fN; lastName = lN;
         accountID = acct;
         currentBalance = bal;
         if(accountID > Account.maxAccountID)
            Account.maxAccountID = accountID;
      }     

  public double getBalance(){
        String [] s = currentBalance.split(" ");
        String balStr = "$"+s[0]+"."+s[1];
            double currentBalance = Double.parseDouble(balStr);
         return currentBalance;
      }
}

提前致谢!

【问题讨论】:

  • 您的问题到底是什么?在您的代码中,您已经使用 Double.parseDouble(balStr) 将 String 转换为 double

标签: java string parsing double bank


【解决方案1】:
String s="891692 06";
Double.parseDouble(s.replace(" ", ".")); would do the trick

您可以使用 API 中的NumberFormatClass 来获取货币信息。

【讨论】:

    【解决方案2】:

    如果您的代表double 的字符串使用空格' ' 而不是小数点,您可以通过将空格替换为点来修复它,如下所示:

    String currentBalanceStr = "891692 06";
    double currentBalanceDbl = Double.parseDouble(currentBalanceStr.replaceAll(" ","."));
    

    Link to ideone.

    【讨论】:

    • 这样它会将金额返回为“0.0”
    • @Gcap 这很奇怪。您是否按照链接查看您的代码是否与我的代码相同?
    • 是的,它看过了.. 问题是我有一个字符串正在通过 currentBalanceStr 从另一个类输入
    • @Gcap 在调用parseDouble 之前,您应该打印currentBalanceStr 以查看其值。
    • Nvmd 它的工作大声笑但是当字符串说“891692 60”时它会在最后切断 0,你知道我可以保留它吗?
    【解决方案3】:

    使用Double 进行余额计算不是一个好主意,使用BigDecimal 更有意义,因为它更精确。

    您也可以使用下面的类添加货币:

    Locale enUSLocale =
        new Locale.Builder().setLanguage("en").setRegion("US").build();
    
    Currency currencyInstance = Currency.getInstance(enUSLocale);
    
    System.out.println(
        "Symbol for US Dollar, en-US locale: " +
        currencyInstance.getSymbol(enUSLocale));
    

    请通过this link了解更多详情。

    【讨论】:

    • 不允许在这个项目中使用 BigDecimal
    【解决方案4】:

    您似乎在进行货币计算,所以请始终使用 BigDecimal

    BigDecimal balStr = new BigDecimal(String.replaceAll(" ",".");
    

    【讨论】:

    • 使用 BigDecimal 进行精度计算的好主意
    猜你喜欢
    • 2010-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多