[swift-users] Different behaviour when casting Float and Double to NSNumber

Lars-Jørgen Kristiansen larsjk.84 at gmail.com
Wed Oct 5 04:30:03 CDT 2016


I'm working with a third party API for some external hardware. One of the functions takes a NSNumber, and it fails to interact correctly with the hardware if I cast a Float too NSNumber, but works as expected if I use Double..

I dont know if it is related to NSNumber.stringValue since I dont know what the third part lib does with the NSNumber, but I noticed this:

let float = 100_000_00 as Float
let floatNumber = float as NSNumber

let double = 100_000_00 as Double
let doubleNumer = double as NSNumber

hardware.doThing(number: floatNumber as NSNumber) // Hardware does not work
hardware.doThing(number: doubleNumer as NSNumber) // Hardware works

// Also noticed this:
"\(floatNumber)" // "1e+07"
"\(doubleNumer)" // "10000000"

Is this expected behaviour?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-users/attachments/20161005/ce9238b0/attachment.html>


More information about the swift-users mailing list