簡體   English   中英

NSNumberFormatter的問題

[英]Problems with NSNumberFormatter

我正在使用計算器應用程序,它使用雙打,然后當你按下等於操作完成雙打然后切換到NSNumberFormatter。 我的問題是當用戶想要在屏幕上的答案中添加(或 - ,/,*)數字時。 如果屏幕上的數字沒有逗號,一切正常,如果屏幕上的數字確實有逗號,我會得到一個隨機數而不是正確的答案。 有什么建議么?

這是我的等於按鈕的代碼。 我對每個操作都有相同的代碼。 請原諒我糟糕的命名

test.firstnumbers也是一個字符串,用於在用戶輸入數學問題的第二組數字之前存儲數字

    double number = [test.firstNumbers doubleValue];

    double otherNumber = [self.label.text doubleValue];

    double answer = number + otherNumber;

    NSNumberFormatter *finalAnswer = [[NSNumberFormatter alloc]init];

    [finalAnswer setNumberStyle:NSNumberFormatterDecimalStyle];

    self.label.text = [finalAnswer stringFromNumber:[NSNumber numberWithDouble:answer]];

double otherNumber = [self.labelTwo.text doubleValue];

您永遠不想使用顯示結果的視圖作為數據存儲。 這違反了MVC范式,而且通常是一個糟糕的計划。 您應該將顯示中的數字存儲在數據模型中(即使該“模型”與視圖控制器中的實例變量一樣簡單)。 除了其他好處之外,這還避免了將數字轉換為文本然后再轉換為數字的需要,因此完全避免了您使用逗號時出現的問題。

看一下問題的直接原因,您使用NSString的-doubleValue方法將字符串轉換為數字,但使用數字格式器將數字轉換為字符串。 如你所見,這兩者並不是完全互補的。 使用數字格式化器來進行兩次轉換,你會有更好的運氣。 但是,再次,你真的不應該使用視圖來保存操作數。

它不是隨機的,它完全可以預測但是錯誤,因為doubleValue不解釋逗號。

當顯示的當前字符串是22,222,223並且您嘗試添加2 ,您嘗試使用doubleValue獲取22,222,223的double值。 但是doubleValue不理解逗號,因此它在到達第一個時停止。 因此,不是22222223 ,而是獲得22的值。 代碼為它添加2並獲得24 ,這就是你所看到的。

要讀取和解析包含逗號的數字,可以再次使用NSNumberFormatter ,這次使用numberForString方法。 但是,正如@Caleb指出的那樣,這是一個非常糟糕的設計。 您應該將值存儲在代碼中的某個屬性中,並在執行數學時使用它。 除非用戶剛剛輸入,否則不要從UI讀取數據。 永遠不要將數據寫入UI然后將其讀回,除非用戶有某種方式來更改該數據。

我同意Caleb,你可以將模型(數字計算)更好地分離到其他視圖+控制器。

但是我認為問題在於從字符串轉換為'double value':用點替換所有逗號都可以。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM