2012-10-27 16 views
1

我現在正在計算器上工作,並且除小數點以外的一切正常工作。Android:計算器顯示0後立即點

該計算器實際上包含2個顯示器,其中一個被稱爲fakedisplay用於實際操作,另一個被稱爲顯示器,用於呈現所需的格式,即添加逗號。

當按下12345.678時,顯示屏會按fakedisplay顯示,並顯示爲12345.678,但如果按12345.009,fakedisplay將正常工作爲12345.009,但顯示屏卡住爲12,345,直到按下9,然後顯示12,345.009一般。

然而奇怪的是,當用戶按0時,沒有響應,直到按9,009纔會立即追加。

我知道這起源於解析代碼,但基於此,我該如何修改下面的代碼?我真的想不出任何解決方案......非常感謝您的建議!

one.setOnClickListener(new View.OnClickListener() { 
    if (str.length()<15) { 
     Fakedisplay.append("1"); 
    } 

    DecimalFormat myFormatter1 = new DecimalFormat("###,###,###,###.#################"); 
    String str1=Fakedisplay.getText().toString(); 
    String stripped1 = Double.valueOf(str1).toString(); 
    stripped1 = myFormatter1.format(Double.valueOf(stripped1)); 

    if (stripped1.endsWith(".0")) 
     stripped1 = stripped1.substring(0, stripped1.length() - 2); 

    Display.setText(stripped1); 
} 

回答

0

也許最簡單的解決方案是條關閉在每次擊鍵的代碼.0 ..

相反,只有剝離尾隨零(假設有一個小數點在那裏當然)當用戶呼叫的結果。輸入諸如數字鍵09,小數點.或符號更改鍵+/-(我稱之爲輸入鍵)的鍵不會產生結果,因此不應去除尾隨零。

但是,非輸入密鑰,例如按計算器上的+-=可以自由修改數字。

當用戶輸入這些數字時,會顯示輸入的數字,但仍會在必要時去除尾隨零。

你可以做到這一點的修改,您的發言(和,如前所述,只有這樣,當用戶按下了非輸入鍵):

stripped1 = stripped1.replaceAll("(\\.[0-9]*[1-9])0+$","$1"); 
stripped1 = stripped1.replaceAll("\\.0$",""); 

第一條語句的刪除所有尾隨零十進制數的結尾(除非是真的是一個整數)。第二個照顧這種情況。

毫無疑問,我可以做一個單一的替代,如果我給了它更多的思考,但這應該足以讓它的功能。