在iphone的计算器中,如何根据用户的意愿输入小数点?

在iphone的计算器中,如何根据用户的意愿输入小数点?,iphone,xcode,xcode4,Iphone,Xcode,Xcode4,我有一个计算器,我想把小数点根据按钮按下小数点。我得到小数点,但如果我输入另一个数字,小数点将消失并被覆盖 十进制压力机的代码如下所述:- -(IBAction)decimalPressed:(id)sender{ calculatorScreen.text = [calculatorScreen.text stringByAppendingString:@"."]; } 对于数字按键,它是:- -(IBAction)buttonDigitPressed:(id)sender{ cur

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

十进制压力机的代码如下所述:-

-(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,再除以100,依此类推

所以编辑你的函数应该是这样的

-(IBAction)buttonDigitPressed:(id)sender{
  currentNumber = currentNumber + (float)[sender tag] / 10.0;
  calculatorScreen.text = [NSString stringWithFormat:@"%g",currentNumber];
}
请尝试以下代码:

-(IBAction)buttonDigitPressed:(id)sender
{
     UIButton *pressedButton = (UIButton *)sender;
     calculatorScreen.text = [calculatorScreen.text stringByAppendingFormat:@"%d",pressedButton.tag];
     currentNumber = [calculatorScreen.text floatValue];
}

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


这是计算器的示例代码。

我最近做了一个计算器应用程序,可以理解您的问题。关于该点,您需要注意的另一点是,您不希望在计算中有多个点,例如10.345.1123.5。简单地说,您希望它也是一个合法的浮点数

话虽如此,您可以使用iAction记住将其链接到您的故事板或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;
}
虽然这可能是我们在同一个项目上所做的,但也可能是完全不同的,你可以自己从头开始,所以我将介绍一些代码

您可以用默认id替换UIButton,但最好是静态替换它,以便为您自己或查看您的代码的任何其他人澄清

NSRange顾名思义,标记范围,范围将是您的计算显示文本,例如1235.3568,在本例中,其目标字符串的范围为。 所以,如果nsnotfoundrangeofstring。在将附加当前显示文本的文本范围中找不到。使用函数stringByAppendingString:@.,没有其他函数,因此在以下情况下将不会发生函数。已找到,解决了显示器上的多点问题

userIsInTheMiddleOfEnteringANumber是一个解决在您的显示器中显示0的问题的工具,例如06357,如果您有方法更改它,请用您自己的方法名称替换我的方法名称。

这是我的解决方案:

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

希望这有帮助。。另一种解决方法…

如果你想要32作为一个数字呢?第一次单击后,您将得到0.3,第二次单击后,您将得到0.5,您将需要详细说明代码,但基本上,您必须在输入后除以值。如果为10,则按100作为伪码。是输入的数字后的位数。=x new number=old number+newnumber/x*10尝试实现它不比仅仅使用doubleValue或floatValue方法复杂得多吗?别忘了,一个好的程序员是一个懒惰的程序员。display和userIsInTheMiddleOfEnteringANumber找不到。为什么会这样?如果标签的名称不同,显示将是您的第一个标签,请相应地命名。userIsInTheMiddleOfEnteringANumber是一个全局BOOL变量,我使用它来消除输入数字以0开头的问题,例如0615,因为计算器的默认起始屏幕设置为0。在对象上找不到属性标记。错误在发件人标记上。还有其他解决办法吗?
#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