我正在尝试制作一个计算器。一切正常,但现在我想添加一个小数点,我不知道如何。你能帮忙吗?谢谢。
我试过这个
- (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
{
}
答案 0 :(得分:1)
SelectNumber
是double
,您无法像使用@"."
一样添加字符串。
您最有可能要做的只是将值存储在字符串中(而不是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的标准(并且一般被接受)。示例:runningTotal
,selectNumber
。对于函数名称等也是如此。主要原因是以大写字母开头的东西通常是类名,因此这提高了可读性并减少了混淆。
答案 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];
...
}