2013-05-02 83 views
0

我正在爲我的計算機科學課程開發圖形計算應用程序。我正在做很多矢量計算,但有時我會因爲浮點運算而得到一些嚴重的截斷。Java - 浮點數有限小數點但沒有昏迷

問題是我嘗試了一些限制浮點數的小數位數的方法,例如2個地方。以下是我嘗試過的一些東西:

1 - 除以100然後乘以100.這不是所有的時間。其實這對我來說都不適合。

2 - 使用DecimalFormat。如果我有1000以下的數字,這種格式化方法效果很好。當我有1003.3124這樣的數字時,它的格式爲1,003.31。由於這個格式化會返回一個String,所以Floats的解析函數由於昏迷而不起作用。我嘗試將DecimalFormatSymbols()setGroupingSeparator設置爲不同的字符,包括無空格和無長字符('\ u0200B','\ u0000',...),但是我得到'?'而不是所需的字符。

3 - 將語言環境設置爲美國。由於我的Windows運行在巴西葡萄牙語(這裏的點和昏迷有不同的論文:您的1,300.42是我們的1.300,42!)我認爲這很愚蠢,但這不是問題。這也沒有解決。

4 - 取出字符串,刪除昏迷並返回浮點數。這就是我現在正在做的事情,它工作正常。但是,因爲它是一個圖形應用程序,所以我一直在用數字進行標準化。所以String解決方案總是太重了。

那麼你知道解決這個問題的另一種方法嗎?我需要最優化的一個。對不起,如果我不清楚。

+0

您想限制僅用於顯示的小數位數,還是用於內部存儲/計算? – leonbloy 2013-05-02 13:28:09

回答

0

我建議你只用float進行計算,如果你想在你使用String.format後的點/昏迷後顯示兩位數字的數字。

試圖做到這一點的RAM,優化計算可能不是一個好主意,因爲花車已經是非常Java和硬件優化的基本類型。

+0

可能是我要做的。不需要限制內存中的浮點數。感謝您的回答。 – Felps 2013-05-02 13:47:30

0

目前還不清楚您是否正在處理顯示問題或內部存儲/計算。如果以後,閱讀有關BigDecimal

如果您的問題只是顯示,然後使用合適的DecimalFormat。我不明白你的意思是什麼「由於這個格式化返回一個字符串,浮動的解析函數不起作用」,你爲什麼要解析它?

+0

我想分析以存儲新的Formated Float。我會看看BigDecimal。謝謝。 – Felps 2013-05-02 13:46:05

0

解決這個問題的一個辦法可能是將你的浮點數乘以100後作爲一個整數,然後在做這個之後將它作爲浮點數轉換。例如:

float x = 20; 
float y = (float)Math.PI; 
float total = (float)(int)((x+y)*100)/100; 

我不知道有多好這工作記憶明智的,或速度明智的,但它肯定是做到這一點的方法之一。

+0

這不適用於花車。我已經用雙倍的機會嘗試過了,這已經夠好了,但由於某些原因,Float並沒有改變。 – Felps 2013-05-03 18:28:13

相關問題