2017-03-14 6 views
5

float 또는 double은 돈과 수량과 같은 10 진수를 저장하는 데 적합하지 않습니다. 대신 NSDecimalNumber를 사용하려고합니다. 스위프트 놀이터에서 코드를 보겠습니다.NSDecimalNumber에 1.66을 저장하는 방법

let number:NSDecimalNumber = 1.66 
let text:String = String(describing: number) 
NSLog(text) 

콘솔 출력은 내가 변수에 진수 1.66의 정확한 값을 저장할 수있는 방법 1.6599999999999995904

입니까?

let number:NSDecimalNumber = 1.66 

우변

+0

확인이를. http://stackoverflow.com/a/31070910/2975371 – Danieboy

+0

감사합니다. @Danieboy. 나는 신속하게 새로운 사람이다. 변수에 정확하게 1.66을 저장하는 샘플 코드를 제공 할 수 있습니까? – Joey

답변

8

값은 "1.66"을 정확히 나타낼 수없는 부동 소수점 수이다.

let number = NSDecimalNumber(value: 166).dividing(by: 100) 
print(number) // 1.66 

스위프트 3 사용하면 "오버레이 값 유형"Decimal을 대신 사용하는 고려할 수 :

let number = NSDecimalNumber(string: "1.66") 
print(number) // 1.66 

또 다른 옵션은 연산을 사용하는 것입니다 : 하나의 옵션은 문자열에서 진수 를 만드는 것입니다 , 예.

let num = Decimal(166)/Decimal(100) 
print(num) // 1.66 

또 다른 옵션 :

let num = Decimal(sign: .plus, exponent: -2, significand: 166) 
print(num) // 1.66