要加倍并使用IsNaN的字符串

时间:2014-12-11 19:55:47

标签: java format double

我有一个定义为String的变量,

String totalweight;

这可能取值'0.00','0.12'......任何十分位数,偶尔会有'不适用'。

现在我必须以这样的方式格式化这个字段,如果它不是一个例如:'n / a',那么就像下面那样格式化它们。

public String getFmtWeight()
    {
          NumberFormat nf = NumberFormat.getNumberInstance();
          DecimalFormat df = (DecimalFormat)nf;
          df.applyPattern("#0.00");
          if(Double.isNaN(Double.parseDouble(totalweight)))       
              return totalweight;
          else
              return df.format(Double.parseDouble(totalweight));

//        if(!totalweight.equals("n/a"))
//            return df.format(Double.parseDouble(totalweight));
//        else 
//            return "n/a";

    }

当n / a被强制转换为double throws异常时,这会中断。但评论部分可行。但我不想使用它,因为'n / a'将来可能会因不同的字符串而改变。还有其他方法可以实现同样的目标吗?

2 个答案:

答案 0 :(得分:0)

一种解决方案是使用try-catch来解释在双重失败时解析字符串的问题,例如:

public String getFmtWeight()
    {
          NumberFormat nf = NumberFormat.getNumberInstance();
          DecimalFormat df = (DecimalFormat)nf;
          df.applyPattern("#0.00");

          try {
              if(Double.isNaN(Double.parseDouble(totalweight)))       
                  return totalweight;
              else
                  return df.format(Double.parseDouble(totalweight));

          } catch ( NumberFormatException ex ) {
              /* thrown when the String can't be parsed as a double */
              return totalweight; // if 'totalweight' is the String you want to parse
          }
    }

这将处理使用parseDouble无法解析为double的任何字符串。

答案 1 :(得分:0)

您可以使用正则表达式进行验证。

NumberFormat nf = NumberFormat.getNumberInstance();
    DecimalFormat df = (DecimalFormat)nf;
    df.applyPattern("#0.00");
    String totalweight = "n/a";

    String pattern = "[0-9]*.[0-9]*";

    boolean isNan = Pattern.matches(pattern, totalweight);
    if(!isNan)  {
        System.out.println(totalweight);
    }
    else {
        System.out.println(df.format(Double.parseDouble(totalweight)));
    }

您可以尝试此代码