Swift 앱의 특정 Doubles는 NSNumber로 변환 할 때 문제를 일으키고 일부는 그렇지 않습니다. 내 응용 프로그램은 코어 데이터를 사용하여 저장하고 검색 할 수 있도록 NSNumbers에 소수점 이하 두 자리 (가격)의 double을 변환해야합니다. 예를 들어, NSNumber의 doubleValue 메소드를 사용하여 특별히 포맷하지 않는 한 79.99와 같은 특정 가격은 99.98999999999999로 평가됩니다. 여기Swift에서 Double을 NSNumber로 변환하면 정확도가 떨어집니다.
selectedWarranty.price = 79.99 나는 이유가있는 경우 변환이
Original double: 79.99
Converted to NSNumber: 79.98999999999999
.doubleValue Representation: 79.99
누군가가 설명 할 수를 작동하는 방법을 보여 일부 인쇄 문을 프로그램
// item.price: NSNumber?
// selectedWarranty.price: Double?
item.price = NSNumber(double: selectedWarranty.price!)
디버거 같이 왜 이니셜 라이저는 모든 숫자에 대해 소수점 2 자리를 확실히 유지할 수 없습니까? 코어 데이터에 반드시 가격을 저장하고 싶습니다. 표시 될 때마다 서식을 지정하는 것이 매우 편리하지 않습니다.
UPDATE : 데이터 모델을 통해 NSDecimalNumber를 입력 할 수 변환 코어 데이터 객체, 79.99 및 99.99 더 이상 문제가 있지만, 다른 번호로 지금보다 관리 문제 ... 첫째
Original double: 39.99
Converted to NSDecimalNumber: 39.99000000000001024
[최소, 완전하고 검증 가능한 예] (http://stackoverflow.com/help/mcve)를 만드실 수 있습니까? – Alexander
통화에 'NSNumber' 대신'NSDecimalNumber'를 사용하십시오. – rmaddy
이 문제는 재현 할 수 없습니다. http://swiftlang.ng.bluemix.net/#/repl/57bdc2590dcf4abf47da28c2 – Alexander