2017-05-12 7 views
0

浮動小数点数を解析するためのメソッドを書く際に問題が発生しました。基本的には、floatの文字列値が渡されるメソッドがあります。 '.12'が渡された場合、10進数の前に '0'をあらかじめ付加してはいけません。 それに '0.12'を渡すと、最初の '0'が削除されてはならず、番号はそのままにしてください。10進数の前に接頭辞がないDecimalFormatパターン

私が何をしても、「0」は常に10進数の前に接頭辞が付きます。

私が書かれている方法は次のとおりです。

public static Number parseNumber(String value) throws ParseException { 
    NumberFormat numberFormatter = NumberFormat.getInstance(Locale.US); 
    ((DecimalFormat) numberFormatter).setParseBigDecimal(true); 

    String displayFormatCode = "###,###,###.##"; 

    ((DecimalFormat) numberFormatter).applyPattern(displayFormatCode); 
    return numberFormatter.parse(value); 
} 

ここでの制約は、私は正規表現をチェックするための追加のコードを設定することができないということです。このメソッドは他のデータ型にも使用でき、上記のメソッドで使用されているdisplayFormatCodeは外部で設定された変数であるため、適切なフォーマットコードを把握する必要があります。

私はいくつかのフォーラムを検索しましたが、私が得た唯一の解決策は、ここではオプションではない正規表現を使用することでした。それは私の環境でOK実行しているので

+2

あなたは 'format'の値を返す必要があります - あなたは' Number'を返しています –

+1

達成したいことは不明です。 '.12'と' 0.12'は数学的にも同じ値でも、 'double'でも同じです。 – Henry

+0

そうですが、これはクライアントからのものです。だからそれを助けることはできない。クライアントは神です!基本的には「.12」を達成したいと思います。 –

答えて

0

あなたは、私がコメントとして答えることができなかったので、

public static String formatAmountTwoDecimal(Double amount) { 
    if (amount == null) { 
     return "0.0"; 
    } 
    else { 
     String amt = Formatter.formatDouble(amount); 
     return amt; 
    } 
} 

public static String formatDouble(Double param){ 
    DecimalFormat decimalFormat = new DecimalFormat("#.00"); 
    String retVal=null; 
    if(param!=null){ 
     retVal=decimalFormat.format(param); 
    } 
    return retVal; 
} 

この答えは、Javaコードが含まれているこのコードを試すことができます!

希望の回答が得られますようお願いいたします。

+0

ありがとう。しかし、このコードは、望ましくない小数点以下2桁までの値を近似しています。そして、表示フォーマットコードの '0'を '#'に置き換えると、0がプレフィックスになり始めます。 –

0

あなたが達成しようとしているすべては、あなたが数を文字列に変換し、それが0

public static void main(String[] args) throws ParseException { 
    Number value = parseNumber(".512"); 
    System.out.println(removeLeadingZero(value)); 
} 

public static String removeLeadingZero(Number value) { 
    String tempValue = value.toString(); 
    if (tempValue.charAt(0) == '0') { 
     tempValue = tempValue.substring(1); 
    } 
    return tempValue; 
} 

だ場合は、最初の文字を取り除くことができ 、小数点の前に「0」を削除する場合これにより、.512が出力され、既存の設定に影響することはありません。

関連する問題