2016-02-15 29 views
1

我正在嘗試爲應用創建sms計數器。它在第一次測試中運行良好,但突然沒有按照它的方式行事。基於字符數的SMS計數

我想要做的是根據在EditText中輸入的字符數獲取發送的短信數量。

0字符數= 0(SMS COUNT)
160字符數= 1(SMS COUNT)
161字符數= 2(SMS COUNT)
320字符數= 2(SMS COUNT)
321字符數= 3(SMS COUNT)


基本上一個SMS可以包含160個字符。我在jsfiddle上試過同樣的東西,它的工作正常。請在這裏--->JS Fiddle Link

代碼片段

我試過張貼在這裏,但所以還是顯示代碼不格式化差錯。請在pastebin上找到代碼。

Pastebin Link

logcat的

http://pastebin.com/wb1xm7fj 

任何幫助,將不勝感激

+0

它的行爲如何,而不是你期望/需要它的方式? –

+0

對於第一部分,它的行爲正確。當0個字符時,它顯示短信號的數量爲0.從1到160個字符顯示短信號的數量爲1.但是,當字符是161時,它應該顯示短信號的數量爲2,但它顯示爲1 –

回答

0

在你的代碼中出現問題,因爲你將調用Math.ceil之前int S:161/160 == 1,不1.00625 。由於Math.ceil(1) == 1,實際上不能撥打Math.ceil

瑣碎的修復,以現有的代碼是寫劃分爲

msgChar/160.0 

這迫使msgChar要上溯造型爲雙,所以這將表現得像你的預期。

你並不需要使用Math.ceil圓分工的結果了:如果你分裂,結果將被四捨五入到下一個整數前添加denominator-1以積極的分子:

int msgCount = (numChars + 159)/160; 

Ideone demo

+0

這是有效的。感謝您的幫助..僅供參考。你能告訴我爲什麼Math.ceil沒有給出期望的輸出嗎? –

+0

這是因爲整數算法是如何工作的 - 在'Math.ceil'之前你將兩個整數*分開,所以它已經被「floiled」了 - 161/160 == 1而不是1.00625。如果你使用'msgChar/160.0',它將會工作。 –

+0

它在jsfiddle上工作,所以我認爲它也可以在應用程序中工作。感謝幫助隊友。 –