2015-07-04 33 views
0

我正在通過向標準計算器添加十分需要的小數選項來添加到當前正在運行的應用程序。我一直在努力尋找一種方法來做到這一點。我終於找到了今天實現小數的方法。問題是我得到的錯誤,所以我不能建立它,看看它是否工作。有人可以告訴我如何解決我遇到的錯誤嗎?或者更好的方法來實現小數?計算器應用程序實現方法的小數

這裏是我的代碼:

.h文件中:

// 
// ViewController.h 
// CalculatorPlus 
// 
// Created by William Harris on 12/20/14. 
// Copyright (c) 2014 William Harris. All rights reserved. 
// 

#import <UIKit/UIKit.h> 
#import <iAd/iAd.h> 
#import <StoreKit/StoreKit.h> 
#import "Calculator.h" 
#import "ViewController2.h" 
#import "ViewController3.h" 
#import "ViewController4.h" 

@class ViewController; 

@interface ViewController : UIViewController <UIActionSheetDelegate, ADBannerViewDelegate> { 

float result; 
IBOutlet UILabel *calculatorScreen; 
NSInteger currentOperation; 
float currentNumber; 

} 

@property (strong, nonatomic) IBOutlet UILabel *calculatorScreen; 
@property (strong, nonatomic) IBOutlet ADBannerView *ad1; 
-(IBAction)buttonDigitPressed:(id)sender; 
-(IBAction)buttonOperationPressed:(id)sender; 
-(IBAction)cancelInput:(id)sender; 
-(IBAction)cancelOperation:(id)sender; 
-(IBAction)changeCalculatorTapped:(id)sender; 

@end 

.m文件:

// 
// ViewController.m 
// CalculatorPlus 
// 
// Created by William Harris on 12/20/14. 
// Copyright (c) 2014 William Harris. All rights reserved. 
// 

#import "ViewController.h" 

NSUInteger decimalPlacesLimit = 2; 

@interface ViewController() 

@end 

@implementation ViewController 

@synthesize ad1, calculatorScreen; 

-(IBAction)buttonDigitPressed:(id)sender { 

currentNumber = currentNumber *10 + (float) [sender tag]; 
calculatorScreen.text = [NSString stringWithFormat:@"%1.2f",currentNumber]; 
NSRange range = [self.calculatorScreen.text rangeOfString:@"."]; 

BOOL canUpdateScreen = YES; 
if(range.location != NSNotFound) { 
    if([sender tag] == 99) { 
     // Already got dot, cannot show another dot 
     canUpdateScreen = NO; 
    } else { 
     NSArray *explodedString = (NSArray*)[self.calculatorScreen.text  componentsSeparatedByString:@"."]; 
     if(explodedString[1].length >= decimalPlacesLimit) { 
      canUpdateScreen = NO; 
     } 
    } 
} 

if(canUpdateScreen) { 
    if([sender tag] == 99) { 
     self.calculatorScreen.text = [NSString stringWithFormat:@"%@%@", self.calculatorScreen.text, @"."]; 
    } else { 
     self.calculatorScreen.text = [NSString stringWithFormat:@"%@%ld", self.calculatorScreen.text, (long)[sender tag]]; 
    } 
} 
} 

-(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:@"%1.2f",result]; 
if ([sender tag] == 0) result = 0; 
currentOperation = [sender tag]; 
} 
-(IBAction)cancelInput:(id)sender { 

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

} 

-(IBAction)cancelOperation:(id)sender { 

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

- (void)viewDidLoad { 
[super viewDidLoad]; 

calculatorScreen.adjustsFontSizeToFitWidth = true; 
} 

-(void)didReceiveMemoryWarning { 
[super didReceiveMemoryWarning]; 
// Dispose of any resources that can be recreated. 
} 

錯誤消息我得到:

​​

有人可以告訴我如何修復錯誤?或者,如果有更好的方法來實現小數?我真的需要幫助獲得小數工作。謝謝!

+0

我滾這回原來的問題,因爲它是封閉的重複。不要完全改變你的問題,而是發佈一個新問題。 – rmaddy

+0

這讓事情變得更加困難,但我明白。我將發佈一個新問題,也許你想回答它?解決了錯誤的@rmaddy –

回答

1

explodedStringNSArray *NSArray s將它們的對象存儲爲id s,它們基本上只是泛型對象。儘管您和我知道explodedString的內容是NSString * s,但編譯器不會。它需要保持陣列中所有對象的安全路線爲id s。

總結: 編譯器不知道explodedString[1]是一個字符串。

修復:明確鑄造explodedString[1]NSString *

if(((NSString *) explodedString[1]).length >= decimalPlacesLimit) 
// ^
// Add this 
+0

。但是,謝謝你,它並沒有完全回答我的問題。我剛剛運行我的應用程序,而小數點工作時,它不適用於我的預先存在的計算器。正如我在我原來的問題中提到的那樣,現在既然這不起作用,那麼我會在我的函數計算器中添加什麼來使小數與預先存在的函數和代碼一起工作。我將編輯我的問題並添加更多截圖以進一步幫助您來幫助我。謝謝!!!! –

+0

@iOSDeveloper您需要爲您的新問題發佈一個全新的問題。這個問題應該只包括錯誤。 – rmaddy

+0

@rmaddy我調整了問題以適應我在實現這一個特定想法時遇到的更廣泛的問題 –

0

在一個NSArray的對象是ID類型(匿名對象)。您必須將它們轉換爲需要的類型,或使用括號表示法。

你可以重寫違規行

if (((NSString*)explodedString[1]).length >= decimalPlacesLimit) 

if ([explodedString[1] length] >= decimalPlacesLimit)