2016-06-01 2 views
0

Я читал, что мне не следует рассматривать цены как цифры double и что я должен хранить их в виде двух целых чисел.Как сохранить цену в двух целых числах в swift

Если, например, у меня есть вход типа 246.464 в UITextField, как я должен сделать это двумя целыми числами?

+0

Возможно, вы столкнулись с проблемами с BIG 'float', но я сомневаюсь, что вы найдете любую проблему с' double'. – redent84

+1

Что значит, что вы не найдете проблемы с точностью? 'var y = 0,1 + 0,1 + 0,1; print (y == 0.3) ' –

+1

также обратите внимание, что вы не можете представить десятичную часть как одно целое, вам также нужен показатель степени. Например, '0,1' и' 0.01' будут отображаться как '0' и' 1', поэтому вам нужно иметь показатель экспоненты ('1' и' 2' соответственно), чтобы отличаться от них. Или вы можете просто сохранить целое число '246464' и сохранить экспонента' 3' (число десятичных цифр). Это то, что делает математика с плавающей запятой, и что делает NSDecimalNumber'. – Sulthan

ответ

5

Забудьте о двух целых числах, сохраните их как NSDecimalNumber. Это класс, специально созданный для этой задачи.

В отличии от float или double, NSDecimalNumber использует декадные арифметическая поэтому нет никакой потери в точности при преобразовании между декадным в двоичный и наоборот.

let text = "246.464" // textField.text 
let number = NSDecimalNumber(string: text) 
Смежные вопросы