NSNumberFormatter numberFromString is adding a small fraction when converting certain numbers

Viewed 846

I'm seeing some strange bugs in my iPhone app that I have narrowed down to my use of NSNumberFormatter.

A stripped down example...

In Xcode playground I have:

let numberFormatter = NSNumberFormatter()
//numberFormatter.numberStyle = .DecimalStyle - does not change behavior

let numberString = "546000.06"

let number: NSNumber = numberFormatter.numberFromString(numberString)!

print("number: \(number)")

let number1: NSNumber = NSDecimalNumber(string: numberString)

print("number1: \(number1)")

This is the output:

number: 546000.0600000001
number1: 546000.06

Note that setting the numberStyle to .DecimalStyle doesn't change anything.

This issue only happens for certain numeric values (for example, 8.03 is another one). I thought NSNumberFormatter was safe for this type of conversion and I haven't seen much noise about this issue on the internet so I want to assume it is something I am doing wrong.

Can anyone explain what I am seeing? Any help is very much appreciated!

2 Answers
Related