2012-08-01 34 views
0

我需要顯示大量貨幣(歐元)值,這些值在使用滑塊時都可能會發生變化。因此,我創建了一個更快雙歐元功能,而不是使用數字格式(不需要內部化,運行在有限資源的Android設備上)。Java:快速翻倍歐元字符串表示

雖然此功能比默認數字格式化程序快得多,但如果速度更快,它會很有趣。有創意嗎?

/* 
* Ugly but fast double to euro string function 
*/ 
public static final String getEuroString(Double euro) { 
    if(euro == null) { 
     return "0,00 €"; 
    } 

    final double d_euro = euro; 
    final int  post = Math.abs((int) Math.round((d_euro % 1) * 100)); 

    return ((int) d_euro) + "," + (post < 10 ? "0" + post : post) + " €"; 
} 

回答

0

採用雙不存儲貨幣價值,用大十進制或joda-money.sourceforge.net

+1

除非您向他展示如何使用BigDecimal或Joda Money做到這一點,否則這更多的是評論而不是答案。 – 2012-08-01 16:01:40

+0

另外,這可能會更慢。 – 2012-08-01 16:04:26

+0

@NimChimpsky:對這些Double值不進行比較或其他操作。他們甚至正確圓形(從json請求解析) – Markus 2012-08-01 16:09:44

0

您需要圓你的結果,你給四捨五入的情況下或表示錯誤。

嘗試

public static void main(String[] args) { 
    System.out.println(print(70e12)); 
    System.out.println(print(70e12 + 0.01)); 
} 

public static String print(double euro) { 
    long eurocents = Math.round(euro * 100); 
    String centsStr = Long.toString(100 + eurocents%100).substring(1); 
    return eurocents/100 + "," + centsStr + " €"; 
} 

打印在https://ideone.com/NAonp0

70000000000000,00 € 
70000000000000,01 € 

使用這種方法,你可以存儲700000億歐元沒有錯誤。

+1

我很困惑。 'Integer.valueOf'方法返回一個Integer(從String解析),所以'substring(1)'將在Integer上被調用,對吧? – Markus 2012-08-02 09:07:38

+1

代碼不可編譯 – turbanoff 2016-09-23 11:47:52

+0

@Markus你是對的。它應該是toString來獲得一個字符串。 – 2016-09-23 11:59:13