2017-03-13 8 views
1

特定のロケールでフォーマットされた文字列を、必要なロケールに変換する必要があります。今Java:文字列を特定のロケールに変換する

0.00

123,133.07

3,700.36

、私は "" で区切りを小数部分せずに浮いているように、その文字列を解析し、代わる、期待: 私は、文字列は次のように受け取ります ""結果は

123.133

ようにする必要があります

3.700

これは私のコードです:

NumberFormat format = NumberFormat.getInstance(Locale.ITALY); 
Number number = format.parse(myStringUnformatted); 
return number.floatValue(); 

しかし、この方法で私は

0(正しい)

123.133(正しい)

3.7(間違った)を取得

n?

+0

私は、米国の書式を解析してイタリア語の書式で出力することを明確にすることはできますか?この場合、あなたが持っているコードはそれを間違った方法で実行しています。数字をイタリア語として解析し、それらを米国として出力しています。この場合、3,700.36は3.7として正しく解析されており、この数の一部ではない期間の後に36があります。あなたが印刷している123,133.07は、123133.07を123.133に変換していて、その数字の一部ではないため、期間の後に再び07を無視しています。 –

答えて

0

文字列を間違ってフォーマットしていませんか?

私はちょうどこの試みた:

public class numberformat { 

    public static float parse(String numberString) throws ParseException { 
     NumberFormat format = NumberFormat.getInstance(Locale.ITALY); 
     Number number = format.parse(numberString); 
     return number.floatValue(); 
    } 

    public static void main(String[] args) { 
     try { 
     System.out.println(parse("0")); 
     System.out.println(parse("123.123,07")); 
     System.out.println(parse("3.700,36")); 
     } catch (ParseException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

をと、次の出力を得た:

0.0 
123123.07 
3700.36 

あなたが期待するもののようですどの。

+0

あなたの答えに使用した入力は私が持っている入力ではありません:) – giozh

+0

私のIDEでコードを編集して、期待通りの結果が出てきました。 –

+0

ああ待って!私はあなたが何をしているのかを見ます!あなたは米国のフォーマットを解析し、イタリアのフォーマットを出力したいと思っていますか?この場合、@TobbがString.formatを提案して使用すると、上記の入力フォーマットを使用して解析した後、適切な形式で印刷されます。 System.out.println(String.format(Locale.ITALY 、 "%.0f"、number)); –

0

According to this documentあなたはイタリアの数字形式を誤解しています。米国ではカンマは数千のグルーパーで、ピリオドは小数点の区切り文字ですが、ほとんどのヨーロッパ諸国では​​まったく逆です。あなたが必要とする出力の場合

、入力が

0,00 
123.133,07 
3.700,36 

私の推測では、あなたの入力番号は、実際にイタリア語ではないということであるべきです。

+0

私の入力はイタリア語ではありません。私はwebserviceから入力を受け取り、私は説明したようにそれを変換する必要があります – giozh

1

数字の内部表現とテキスト表現を区別する必要があります。

まず、数値のテキスト表現をいくつかの形式で取得します。この番号を解析して内部表現にします。このためには、テキスト表現の書式規則を指定する必要があります。あなたが入力できるのは、カンマを小数点に使用するため、イタリア語の形式ではありません。したがって、あなたの番号は正しく解析されません。パースされると、あなたの番号は内部表現を持ち、それは印刷時に特定のロケールに調整することができます。

また、実際に小数点以下を削除するコードはありません。数字のイタリアのフォーマットは、数千の区切りとして.が含まれていないことを

//input is in US format 
final NumberFormat format = NumberFormat.getInstance(Locale.US); 
final Number number = format.parse("123,133.07"); 

//To print the number in Italian format, without decimals (gets rounded off though) 
System.out.println(String.format(Locale.ITALY, "%.0f", number)); 

//To return rounded number 
return Math.round(number.doubleValue()); 

//To return number without the decimals 
return number.longValue(); 

注:

のコードは次のようなものでなければなりません。

関連する問題