在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