2017-07-19 60 views
1

我正在使用Java開發項目,並以微單位爲單位提供價格。如何從Microunits中給定的金額中提取單位和子單位部分?

微單位價格是一個價格,其中1,000,000個微單位等於一個貨幣單位。例如,如果價格是「€7.99」,price_amount_micros是「7990000」

我需要提取7和99作爲單獨的字符串。看了一些帖子有關舍入誤差,我想實現什麼,我需要正確的方法是使用下面的正則表達式給定的量轉換爲字符串並提取單位和亞單位部分:

^(\d+)(\d{2})0000$ 

然而,對於某些原因,我覺得這不是一個優雅的方式。

+1

我不認爲你可以舍入誤差,因爲你所需要的只是除以10^n並應用一個底線函數。 –

+0

@CasimiretHippolyte,如果你給出了一個更詳細的答案與證明,我甚至可能會接受:) –

回答

1

你可以把它細化到:

^(\d+)(\d{2})0{4}$ 

但隨後你恕我直言完成。

我在我的數據庫中處理所有價格爲INT。 7.99將在那裏799。 沒有舍入錯誤。

0

它可能看起來像矯枉過正,但要在安全方面與浮點問題,你可以使用BigDecimal基於邏輯的:

void extractParts(String str) { 
    BigDecimal bd = new BigDecimal(str);   
    BigDecimal res = bd.scaleByPowerOfTen(-6); 
    BigDecimal rem = res.remainder(BigDecimal.ONE).stripTrailingZeros(); 

    System.out.printf("<%s> <%s>%n", res.longValue(), 
      rem.movePointRight(rem.scale()).abs().longValue()); 
} 

然後稱其爲:

extractParts("7990000"); 
//=> <7> <99> 

extractParts("-1835000"); 
//=> <-1> <835> 

extractParts("89000000"); 
//=> <89> <0> 
+0

不應該是83.5?它應該是83.5美分,不是835美分。 –

+0

你發送給這個方法的是什麼輸入字符串? – anubhava

相關問題