如何改变小数位数和添加十进制按钮iPhone计算器



那么,看看下面的代码-我的第一个问题是,我如何使它只有0,1或2位小数,或者使它自动具有多少位小数?第二个问题是,如何在计算器上添加一个小数按钮?它有+-/*,我怎么加一个小数按钮呢?我使用的教程在这里http://www.youtube.com/watch?v=Ihw0cfNOrr4,这是我的代码-

viewcontroller.h

 #import <UIKit/UIKit.h>
@interface calcViewController : UIViewController {
float result;
IBOutlet UILabel *calculatorScreen;
int currentOperation;
float currentNumber;
}

-(IBAction)buttonDigitPressed:(id)sender;
-(IBAction)buttonOperationPressed:(id)sender;
-(IBAction)cancelInput;
-(IBAction)cancelOperation;

@end

 #import "calcViewController.h"
@implementation calcViewController

-(IBAction)buttonDigitPressed:(id)sender {

currentNumber = currentNumber *10 + (float)[sender tag];
calculatorScreen.text = [NSString stringWithFormat:@"%2f", currentNumber];
}
-(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;


    }
}
currentNumber = 0;
calculatorScreen.text = [NSString stringWithFormat:@"%2f", result];
if ([sender tag] ==0) result=0;
currentOperation = [sender tag];
}
-(IBAction)cancelInput {
currentNumber =0;
calculatorScreen.text = @"0";
}

-(IBAction)cancelOperation {

currentNumber = 0;
calculatorScreen.text = @"0";
currentOperation = 0;
}

您可以在输出中使用它。

Float *number = 2.2f;
NSLog(@"%.2f",number);

关于这个点你要注意的另一件事是你不希望在你的计算中有多个点,例如10.345.1123.5。简单地说,您希望它也是一个合法的浮点数。

也就是说,你可以使用IBAction(记得把它链接到你的storyboard或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),和字符串的范围锁定在本例中是"。"因此,如果NSNotfound (rangeOfString"。"没有找到文本范围)您将添加当前显示文本"。"的功能stringByAppendingString: @"。",没有别的,所以没有函数将"。"已经发现,解决问题的多个点上显示。

userisinthemiddleofenteringannumber是一个BOOL来解决在你的显示中有0的问题(例如06357),如果你有一个方法来改变它,然后用你自己的方法名替换我的方法名。

关于显示,由于我使用的方法与你的不同,我无法在这方面提供任何帮助或指导。

这是我的解决方案:

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

希望这对你有帮助。

最新更新