2011-10-13 70 views
2

我:爪哇 - 如何從一個整數(金錢)得到雙倍

int number = 1255; -> //It could also be 125(1€25Cent) or 10(10Cent) or 5(5Cent) 

public double toMoney(int number) 
{ 
... 
} 

作爲回報,我想雙號:12.55,或者輸入:10則:00.10

我知道,我可以用模是這樣做的:

1255%,100 ..獲得55 ..但是,如何做到這一點的12月末,如何 形式,它作爲一個雙?

+0

你不應該使用雙值錢的價值觀,壞主意。 –

+0

我正在學習(學校)及其練習的一部分 – eMi

+0

@PetrAbdulin出於好奇,應該用什麼呢? –

回答

3

如果我正確理解你的問題,你可能想只是這樣做:

return (double)number/100.; 

雖然提醒一句:你不應該使用浮點的金錢由於四捨五入的問題。

如果你只想打印貨幣格式的數字,這裏有一個100%安全的方法:

System.out.print((number/100) + "."); 
int cents = number % 100; 
if (cents < 10) 
    System.out.print("0"); 
System.out.println(cents); 

這或許可以被簡化更好......當然,你可以去的BigDecimal了很多,但海事組織用大錘砸死了一隻螞蟻。

+0

我正在學習(學校),它是練習的一部分 – eMi

+0

我想要一個家庭作業,你可能會逃避它。但總的來說,最好將它作爲代表Cents的整數。 – Mysticial

+0

是的,但我必須做一個方法(printMoney)打印這種格式的錢:XX.XX€或任何..所以我需要「變壓器」^^ – eMi

2
public double toMoney(int number) 
{ 
    return number/100.0; 
} 

如果你處理的貨幣金額,千萬記住,當你轉換的數量爲double,可能會發生的一些精度損失。

2
public double toMoney(int number) 
{ 
return number/100.0 
} 

的技巧是使用100.0而非100迫使Java來使用雙師。

2
public double toMoney(int number) 
{ 
    return number/100.0; 
} 

P.S.你不應該使用雙倍的金錢價值,壞主意。

+0

thx工作得很好:D – eMi

+0

eMi:我懷疑這一點。 – jarnbjo

+0

看看答案:'int euro = number/100;如果(歐元<10)System.out.print(「0」); System.out.print((euro)+「。」); int cents = number%100;如果(美分<10)System.out.print(「0」); System.out.println(美分);'工作 – eMi

5

該方法不應該存在,因爲它不能給出正確的結果。

因爲內部,double是一種格式(二進制浮點),其不能準確地表示相同的0.1,在所有 0.2或0.3 一個數字。閱讀Floating-Point Guide瞭解更多信息。

如果你需要小數點,你的輸出格式應該是BigDecimalString

+0

是的,這就是正確的..我有0.1的數字,但我想有00.10 ..但是,當我輸入BigDecimal,它告訴我,該類型無法識別.. – eMi

+0

@eMi'BigDecimal'是一個類,你需要導入它。 – Thomas

+0

@eMi:前導零實際上是關於格式化的,因此您必須使用DecimalFormat來獲取字符串。 –

4

打印金額的方式應該是通過使用NumberFormat類!
看看這個例子:

NumberFormat format = NumberFormat.getCurrencyInstance(Locale.FRANCE); 
format.setCurrency(Currency.getInstance("EUR")); 
System.out.println(format.format(13234.34)); 

哪個打印輸出:

13 234,34 € 

你可以嘗試不同的地區和貨幣代碼。請參閱文檔:http://download.oracle.com/javase/1.4.2/docs/api/java/text/NumberFormat.html