2012-10-02 43 views
-1

我正在構建一個android應用程序。在我的應用程序中,我需要能夠收集一個雙倍數(例如42.42),並且還可以獲得多少我添加到原始數字爲了四捨五入。我目前的代碼不工作,並且它的輸出0 ..無論如何解決這個問題?Java/Android - 四捨五入方程

我當前的代碼:

   float rounded = FloatMath.ceil(val); 
       double getDecimal = (val - FloatMath.floor(val))*100; 
       int noDecimal = (int) ((int) 100-getDecimal); 
       float toadd = (noDecimal/100); 

在我的代碼「四捨五入」的變量是simpel舍入,而「TOADD」應該是多少我添加到它。出於某種原因,toadd總是會返回0.任何幫助?

+3

爲什麼你只是不使用BigDecimal和正確的路由,然後只是減去獲得差異。 –

回答

1
float toadd = (noDecimal/100); 

這會給你0,因爲你是一個較大的小除以整數..

嘗試做這樣的: -

float toadd = (Float.valueOf(noDecimal)/100); 

而且,你也不需要做類型轉換兩次在下面的代碼: -

int noDecimal = (int) ((int) 100-getDecimal); 

只是,外鑄件足夠: -

int noDecimal = (int) (100-getDecimal); 

編輯: -此外,您可能需要使用BigDecimal對於這類問題..

+0

如果你在分區之前強制類型化爲'float'或'double'*,那麼類型轉換就可以工作,而不是之後。 – bdares

+0

關於你在說什麼? –

+0

如果您嘗試運行您的建議代碼,特別是'Float.valueOf(noDecimal/100)',您會發現該值爲0.0,而不是所需的值。 – bdares

2

你將noDecimal通過100。兩者都是整數,結果將始終是一個整數。在這種情況下,它是介於0和1之間的整數,它總是會被截斷爲0.

剛得到數模1(%1),然後獲取原始數的上限?

爲了完整起見,你可以簡單地改變最後一行保持邏輯的其餘部分:

float toadd = noDecimal/100.0; 

這改變了除數爲float和intfloat劃分產生的浮動。

1

也許我錯過了一些事情,或者沒有得到你的意圖,但是如果你只是想知道你添加了什麼,爲什麼不使用差異?

float rounded = FloatMath.ceil(val); 

float toadd = rounded-val; 

編輯:正如評論所說,這可能並不總是給予絕對準確的結果。但這是可以與BigDecimal一起使用的一般思路,它提供了更高的精度。

+1

@Sebastian_H ..這可能不會給出準確的結果。 –

+0

@RohitJain對。但是,因爲他只考慮小數點後的前兩位數字,所以我認爲這對他的目的來說足夠準確。但是按照提議使用'BigDecimal'無論如何都要好得多。 –

+0

@ Sebastian_H ..是的,沒有看到OP需要小數點後兩位數。 –