1

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

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

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

4

6 回答 6

2

我最近做了一个计算器应用程序,可以理解你的问题。关于这一点您要注意的另一件事是您不希望在计算中有多个点,例如 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),如果您有方法可以更改它,请将我的方法名称替换为您自己的。

于 2012-05-31T03:48:58.420 回答
0

试试下面的代码:

-(IBAction)buttonDigitPressed:(id)sender
{
     UIButton *pressedButton = (UIButton *)sender;
     calculatorScreen.text = [calculatorScreen.text stringByAppendingFormat:@"%d",pressedButton.tag];
     currentNumber = [calculatorScreen.text floatValue];
}
于 2012-05-30T12:26:49.477 回答
0
-(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];
}
}
于 2012-08-17T17:39:58.030 回答
0

这是我的解决方案:

视图控制器.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

视图控制器.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

希望这会有所帮助..另一种解决方案...

于 2012-11-04T12:03:55.380 回答
-1

按“。”后 之后的所有值将按照按“。”后按的第一个数字进行划分。将除以 10,第二个除以 100,依此类推

所以编辑你的功能它会是这样的

-(IBAction)buttonDigitPressed:(id)sender{
  currentNumber = currentNumber + (float)[sender tag] / 10.0;
  calculatorScreen.text = [NSString stringWithFormat:@"%g",currentNumber];
}
于 2012-05-30T12:24:42.397 回答
-1

我认为这可以解决你的问题

http://www.datasprings.com/resources/articles-information/iphone-sdk-getting-started-example-code

有计算器的示例代码。

于 2012-05-30T12:37:37.907 回答