2014-05-09 3 views
1

Objective-C에서 이러한 코드 줄을 RubyMotion으로 변환하려고하지만 작동하지 않습니다. RubyMotion에서 NSDecimalNumber 클래스 메서드를 사용하는 방법?

NSDecimalNumber *subtotal = [[NSDecimalNumber alloc] initWithString:@"12.34"]; 

    NSDecimalNumber *shipping = [[NSDecimalNumber alloc] initWithString:@"5.99"]; 

    NSDecimalNumber *tax = [[NSDecimalNumber alloc] initWithString:@"2.50"]; 

    NSDecimalNumber *total = [[subtotal decimalNumberByAdding:shipping] decimalNumberByAdding:tax]; 

내가 RubyMotion으로 뭘하려했으나 제대로 동작하지 않습니다 :

subtotal = NSDecimalNumber.decimalNumberWithString('12.34') 

shipping = NSDecimalNumber.decimalNumberWithString('5.99') 

tax = NSDecimalNumber.decimalNumberWithString('2.50') 

total = (subtotal.decimalNumberByAdding(shipping)).decimalNumberByAdding(tax) 

을 그리고 이것은 내가 오류입니다 :

12.3400001525879에 대한 정의되지 않은 메서드`decimalNumberByAdding '플로트 (NoMethodError)

내가 뭘 잘못하고 있는지에 대한 아이디어가 있습니까?

+0

내가 답을 알고하지 않습니다,하지만 나는 RubyMotion이 떠 루비'subtotal' 변환 생각하고 방법이없는'에 따르면 –

+0

을 decimalNumberByAdding' RubyMotion API 문서에는 메소드 decimalNumberByAdding이 있습니다. API 문서는 다음과 같습니다. [link] (http://www.rubymotion.com/developer-center/api/NSDecimalNumber.html) –

+0

예 NSDecimalNumber에는 해당 메소드가 있습니다. 하지만 Ruby의 부동 클래스는 그렇지 않습니다. RubyMotion은 NSNumber를 자동으로 변환하여 NSDecimalNumber가 NSNumber의 서브 클래스이기 때문에 똑같은 일을합니다. 그래서'subtotal'은 더 이상 NSDecimalNumber 타입이 아닙니다. –

답변

2

당신은이 작업을 수행 할 수 있어야한다 :

subtotal = "12.34".to_f 
shipping = "5.99".to_f 
tax = "2.50".to_f 

total = subtotal + shipping + tax 

그냥 이상한 변환 조심. 어쩌면 #round(2) 도울 수 있습니다.

matthewsinclair에 의해 제안
(main)> subtotal = "12.34".to_f 
=> 12.3400001525879 
(main)> shipping = "5.99".to_f 
=> 5.98999977111816 
(main)> tax = "2.50".to_f 
=> 2.5 
(main)> total = subtotal + shipping + tax 
=> 20.8299942016602 

, 그냥 정수를 사용 센트 등 모든 것을 저장할 수 또한 가장 좋은 방법입니다. 그렇게하면 이러한 전환 문제가 발생하지 않습니다.

+0

감사합니다. @ 윌락스에게 도움을주십시오. 나는 당신의 예제에서와 같이 가고 total.round (2)와 같은 #round (2)를 사용할 것이라고 생각한다. RubyMotion 앱에 PayPal-iOS-SDK를 통합하고 있기 때문에 잘될 것이다. 이것이 효과가 있다면 나중에보고 할 것입니다. –