Как использовать методы класса NSDecimalNumber с RubyMotion?

Я пытаюсь преобразовать эти строки кода в Objective-C в RubyMotion, но он не работает.

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) 

И это ошибка, которую я получаю:

undefined метод `decimalNumberByAdding 'для 12.3400001525879: Float (NoMethodError)

Любые идеи о том, что я делаю неправильно?

Вы должны просто сделать это:

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

Просто будьте осторожны с этими странными преобразованиями. Может быть, #round(2) может помочь.

 (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 

Как было предложено matthewsinclair , также лучше всего использовать целые числа и хранить все как центы. Таким образом, вы не получаете ни одной из этих проблем с конверсией.

Вы также можете взглянуть на это: https://github.com/skandragon/stringify_float

  • Как показать экран входа только один раз?
  • iOS: отвлечься назад в цепочке модальных секций
  • Исключение пользовательской клавиатуры iOS
  • Как добавить старые SDK в мою систему?
  • Дублирование символьной ошибки при связывании SDK AdMob в RubyMotion
  • Преобразование времени UTC в местное время
  • Держите приложение RubyMotion от поворота
  • Что заставляет мое приложение Rubymotion Crash?
  • Приложение Rubymotion в разных ios
  • Вывод отчета о сбое TestFlight для приложения RubyMotion
  • Как освободить подзаголовки при закрытии окна
  • Давайте будем гением компьютера.