2017-03-13 94 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(錯)

how ca我做什麼?

+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」,數字)); –

0

According to this document您是誤解意大利數字格式。而在美國,逗號是成千上萬的石斑魚,一段時間是小數點分隔符,在大多數歐洲國家,它恰恰相反。

您需要的輸出,輸入要

0,00 
123.133,07 
3.700,36 

我的猜測是,你輸入的數字實際上不是意大利人。

+0

我知道,我的意見不是意大利語。我從Web服務接收輸入,並且需要按照我所描述的將其轉換 – 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(); 

注意號碼的意大利格式不包括.作爲千位分隔符。

相關問題