我有一个计算器,我想根据按钮按下小数点来输入小数点。我得到小数点,但如果我输入另一个数字,小数品脱消失并被覆盖.
下面提到了十进制按的代码:-
-(IBAction)decimalPressed:(id)sender{
calculatorScreen.text = [calculatorScreen.text stringByAppendingString:@"."];
}
对于数字按,它是:-
-(IBAction)buttonDigitPressed:(id)sender{
currentNumber = currentNumber*10 + (float)[sender tag];
calculatorScreen.text = [NSString stringWithFormat:@"%g",currentNumber];
}
我怎么能做像 23 然后"." 然后 45 这样的事情。结果将是 23.45
我最近做了一个计算器应用程序,可以理解你的问题。关于该点,您要注意的另一件事是,您不希望在计算中有多个点,例如 10.345.1123.5。简而言之,您也希望它是一个合法的浮动数。
话虽如此,您可以使用IBAction(请记住将其链接到您的故事板或xib文件)
-(IBAction)decimalPressed:(UIButton *)sender
{
NSRange range = [self.display.text rangeOfString:@"."];
if (range.location ==NSNotFound){
self.display.text = [ self.display.text stringByAppendingString:@"."];
}
self.userIsInTheMiddleOfEnteringANumber = YES;
}
虽然我们可能在同一个项目上做,但它也可能完全不同(你自己从头开始),所以我将介绍一些代码
您可以将 UIButton 替换为默认 ID,但最好静态替换它,以便为您自己或查看您的代码的任何其他人提供清晰的说明。
NSRange 顾名思义,标记范围,范围将是计算的显示文本(例如 1235.3568),在这种情况下它所针对的字符串范围是"."因此,如果 NSNotfound(在文本范围中找不到 rangeOfString ".),您将在当前显示文本中附加 "." 和函数 stringByAppendingString:@".",则没有其他函数,因此如果已经找到 ".",则不会发生任何函数,这解决了显示器上多点的问题。
userIsInTheMiddleOfEnteringANumber 是一个 BOOL,用于解决显示器中有 0 的问题(例如 06357),如果您有更改它的方法,请将我的方法名称替换为您自己的方法名称。
尝试使用以下代码:
-(IBAction)buttonDigitPressed:(id)sender
{
UIButton *pressedButton = (UIButton *)sender;
calculatorScreen.text = [calculatorScreen.text stringByAppendingFormat:@"%d",pressedButton.tag];
currentNumber = [calculatorScreen.text floatValue];
}
-(IBAction)ButtonDot
{
decimalChecker = 10;
calculatorScreen.text = [NSString stringWithFormat:@"$ %g.", currentSavings];
decimalChecker=1;
}
-(IBAction)buttonDigitPressed:(id)sender
{
if (decimalChecker ==1)
{
currentDecimal = currentDecimal*10 + (float)[sender tag];
calculatorScreen.text = [NSString stringWithFormat:@"$ %g.%g", currentSavings,currentDecimal];
}
else
{
currentSavings = currentSavings*10 + (float)[sender tag];
calculatorScreen.text = [NSString stringWithFormat:@"$ %g",currentSavings];
}
}
的解决方案:
ViewController.h
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController {
float result;
IBOutlet UILabel *TextInput;
int currentOperation;
float currentNumber;
BOOL userInTheMiddleOfEnteringDecimal;
}
- (IBAction)buttonDigitPressed:(id)sender;
- (IBAction)buttonOperationPressed:(id)sender;
- (IBAction)cancelInput;
- (IBAction)cancelOperation;
- (IBAction)dotPressed;
@end
ViewController.m
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
}
- (IBAction)buttonDigitPressed:(id)sender {
if(!userInTheMiddleOfEnteringDecimal)
{
currentNumber = currentNumber*10 + (float)[sender tag];
TextInput.text = [NSString stringWithFormat:@"%d",(int)currentNumber];
}
else{
TextInput.text= [TextInput.text stringByAppendingString:[NSString stringWithFormat:@"%d",[sender tag]]];
currentNumber = [TextInput.text floatValue];
}
}
- (IBAction)buttonOperationPressed:(id)sender {
if (currentOperation == 0) result = currentNumber;
else {
switch (currentOperation) {
case 1:
result = result + currentNumber;
break;
case 2:
result = result - currentNumber;
break;
case 3:
result = result * currentNumber;
break;
case 4:
result = result / currentNumber;
break;
case 5:
currentOperation = 0;
break;
default:
break;
}
}
currentNumber = 0;
TextInput.text = [NSString stringWithFormat:@"%.2f",result];
if ([sender tag] == 0) result = 0;
currentOperation = [sender tag];
userInTheMiddleOfEnteringDecimal = NO;
}
-(IBAction)cancelInput{
currentNumber = (int)(currentNumber/10);
TextInput.text = [NSString stringWithFormat:@"%.2f",currentNumber];;
}
-(IBAction)cancelOperation{
currentNumber = 0;
TextInput.text = @"0";
userInTheMiddleOfEnteringDecimal = NO;
}
- (IBAction)dotPressed{
if(!userInTheMiddleOfEnteringDecimal){
userInTheMiddleOfEnteringDecimal = YES;
TextInput.text= [TextInput.text stringByAppendingString:@"."];
}
}
@end
希望这有帮助..另一种解决方案...
按 "." 后的所有值将除法如下按"."后按的第一个数字将除以10,第二个除以100,依此类推
所以编辑你的函数会是这样的
-(IBAction)buttonDigitPressed:(id)sender{
currentNumber = currentNumber + (float)[sender tag] / 10.0;
calculatorScreen.text = [NSString stringWithFormat:@"%g",currentNumber];
}
我认为可以解决您的问题
http://www.datasprings.com/resources/articles-information/iphone-sdk-getting-started-example-code
有计算器的示例代码。