为我的计算器添加小数点

时间:2014-10-18 17:34:49

标签: ios xcode decimal calculator

我正在尝试制作一个计算器。一切正常,但现在我想添加一个小数点,我不知道如何。你能帮忙吗?谢谢。

我试过这个

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

,但是我收到一个错误:二进制表达式的操作数无效('double'和'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
{

}

3 个答案:

答案 0 :(得分:1)

SelectNumberdouble,您无法像使用@"."一样添加字符串。

您最有可能要做的只是将值存储在字符串中(而不是SelectNumber中)。例如,如果您要添加数字&#34; 1&#34;在计算器中:

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

小数点也是如此(尽管你应该检查它是否包含小数):

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

然后,要从字符串中获取值以进行实际计算,您只需使用doubleValue

double value = [screen.text doubleValue];

这样做也可以让你在以下情况下添加退格键:

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

此外,旁注:您不应该以大写字母开头命名变量。 Camelcase是Objective-C的标准(并且一般被接受)。示例:runningTotalselectNumber。对于函数名称等也是如此。主要原因是以大写字母开头的东西通常是类名,因此这提高了可读性并减少了混淆。

答案 1 :(得分:0)

是的,您无法将字符串(@".")添加到double类型的变量中。您需要将SelectNumber存储为NSString,并在用户按下按钮时将字符附加到其中,然后在使用它来计算答案时将其转换为double。

您可以使用以下方法将其转换为双精度:

[SelectNumber doubleValue];

如果不将其存储为字符串,则必须执行复杂的过程以确定按下的下一个数字应该在小数点后面。

答案 2 :(得分:0)

您正在为字符串添加双精度数。两种不同的数据类型,因此不允许使用。

您可以这样做:

-(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];
    ...
}