Почему-то некоторые двойники в моем приложении Swift приносят мне проблемы при преобразовании в NSNumber, а некоторые нет. Моему приложению нужно преобразовать двойные числа с двумя десятичными знаками (цены) в NSNumbers, чтобы их можно было хранить и извлекать с помощью Core Data. Например, несколько конкретных цен, таких как 79.99, будут оцениваться до 99.98999999999999, если они специально не форматируются с использованием метода doubleValue NSNumber.Преобразование Double в NSNumber в Swift Точность потери
Здесь selectedWarranty.price = 79,99, как показано в отладчике
// item.price: NSNumber?
// selectedWarranty.price: Double?
item.price = NSNumber(double: selectedWarranty.price!)
Я запрограммировал некоторые операторы печати, чтобы показать, как преобразование работает
Original double: 79.99
Converted to NSNumber: 79.98999999999999
.doubleValue Representation: 79.99
Может кто-нибудь объяснить, если есть причина, почему Инициализатор не может наверняка сохранить 2 десятичных знака для каждого номера? Я действительно хотел бы хранить цены в Core Data, как они должны быть. Форматирование каждый раз, когда оно отображается, не очень удобно.
UPDATE: Преобразованный объект основных данных для типа NSDecimalNumber по модели данных, 79,99 и 99,99 больше не является проблемой, но теперь более управляемы проблема с разными номерами ...
Original double: 39.99
Converted to NSDecimalNumber: 39.99000000000001024
Можете ли вы сделать [минимальный, полный и проверяемый пример] (http://stackoverflow.com/help/mcve)? – Alexander
Используйте 'NSDecimalNumber' вместо' NSNumber' для валюты. – rmaddy
Я не могу воспроизвести эту проблему. http://swiftlang.ng.bluemix.net/#/repl/57bdc2590dcf4abf47da28c2 – Alexander