如何根据用户的意愿在iPhone的计算器中放置小数点



我有一个计算器,我想根据按钮按下小数点来输入小数点。我得到小数点,但如果我输入另一个数字,小数品脱消失并被覆盖.

下面提到了十进制按的代码:-

-(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

有计算器的示例代码。

最新更新