2014-10-18 61 views
1

我正在試着製作一個計算器。一切工作正常,但現在我想添加一個小數點,我不知道如何。你能幫忙嗎?謝謝。爲我的計算器添加小數點

我想這

- (IBAction) buttondecimal { 
    SelectNumber = SelectNumber * 10; 
    SelectNumber = SelectNumber + @"."; 
    Screen.text = [NSString stringWithFormat: @"%0.f", SelectNumber]; } 

,但我得到一個錯誤:無效的操作數爲二進制表達式( '雙' 和 '的NSString *')

這裏是我的代碼:

.h

#import <UIKit/UIKit.h> 

int Method; 
double SelectNumber; 
double RunningTotal; 

@interface KalkulackaViewController : UIViewController 
{ 
IBOutlet UILabel *deglabel; 
IBOutlet UIButton *degbutton; 
IBOutlet UITextField *Screen; 
} 

-(IBAction)Number1:(id)sender; 
-(IBAction)Nasobeni:(id)sender; 
-(IBAction)Deleni:(id)sender; 
-(IBAction)Minus:(id)sender; 
-(IBAction)Plus:(id)sender; 
-(IBAction)Rovnase:(id)sender; 
-(IBAction)AllClear:(id)sender; 

@end 

.M

#import "KalkulackaViewController.h" 

@interface KalkulackaViewController() 

@end 

@implementation KalkulackaViewController 


- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     // Custom initialization 
    } 
    return self; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    UIView *paddingView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 10,10)]; 
    Screen.rightView = paddingView; 
    Screen.rightViewMode = UITextFieldViewModeAlways; 
    Screen.leftView = paddingView; 
    Screen.leftViewMode = UITextFieldViewModeAlways; 
} 
-(IBAction)Number1:(id)sender 
{ 
    SelectNumber = SelectNumber * 10; 
    SelectNumber = SelectNumber + 1; 
    Screen.text = [NSString stringWithFormat:@"%0.f", SelectNumber]; 
} 
- (IBAction) buttondecimal 
{ 

} 

回答

1

SelectNumberdouble,你不能將字符串添加到它就像你用@"."做。

你最可能要做的只是將值存儲在字符串中(而不是SelectNumber)。因此,舉例來說,如果你在計算器中添加數字「1」:

Screen.text = [Screen.text stringByAppendingString:@"1"]; 

這同樣適用於小數點(雖然你應該檢查,看看它是否包含小數點的話):

if ([screen.text rangeOfString:@"."].location == NSNotFound) { 
    screen.text = [screen.text stringByAppendingString:@"."]; 
} 

然後,來獲取值出字符串爲實際計算的,你可以用doubleValue

double value = [screen.text doubleValue]; 

做它像這也給你增添如果y退格鍵的能力ou想:

if (screen.text.length > 0) { 
    screen.text = [screen.text substringToIndex:screen.text.length - 1]; 
} 

另外,注意:你不應該命名你的變量以大寫字母開頭。 Camelcase是Objective-C的標準(通常被接受)。例如:runningTotal,selectNumber。功能名稱也是如此。主要原因是以大寫字母開頭的內容通常是類名,所以這提高了可讀性並減少了混淆。

+0

THX對您有所幫助,但如果我使用的號碼添加您的代碼(例如Screen.text = [Screen.text stringByAppendingString:@ 「1」]; ),計算器停止工作,因爲它與SelectNumber一起工作:/ – Alien 2014-10-18 18:56:09

+0

那麼問題是您需要改變您創建計算器的方式,而不是使用「SelectNumber」。所有3個答案都說。 – rebello95 2014-10-18 18:57:03

+0

那麼,我會按照你的意見;-) – Alien 2014-10-18 19:16:30

0

嗯,是的,你不能添加一個字符串(@".")到一個變量是double類型。您需要將您的SelectNumber作爲NSString存儲,並在用戶按下按鈕時向其追加字符,然後在使用它來計算答案時將其轉換爲雙精度。

你可以用它轉換回雙:

[SelectNumber doubleValue]; 

如果你不把它存儲爲一個字符串,你會做複雜的程序,以確定下一個按下的數字應該是小數點後點。

0

您正在向字符串添加一個double。兩種不同的數據類型,所以它是不允許的。

你可以做這樣的事情:

-(IBAction)decimalPressed:(id)sender { 
    calcScreen.text = [calcScreen.text stringByAppendingString:@"."]; 
} 

-(IBAction)numberPressed:(id)sender { 
    calcScreen.text = [calcScreen.text stringByAppendingString:[NSString stringWithFormat:@"%i",[sender tag]]]; 
} 

-(IBAction)operationPressed:(id)sender { 
    selectedNumber = [calcScreen.text floatValue]; 
    ... 
} 
+0

'[sender tag]'不是一個字符串。 – rebello95 2014-10-18 18:24:32

+0

@ rebello95謝謝..編輯它.. – lakesh 2014-10-18 18:28:41