bogen
bogen

Reputation: 10432

How to get rounded value without fraction error when using numberFromString to generate NSDecimalNumber?

I am trying to parse out a NSDecimalNumber from a String, but whatever attributes i set on numberFormatter, I can't get it to stop making a fraction error when getting numberFromString

let numberFormatter = NSNumberFormatter()
numberFormatter.maximumFractionDigits = 1
numberFormatter.decimalSeparator = "."
numberFormatter.generatesDecimalNumbers = true
numberFormatter.roundingMode = .RoundDown
numberFormatter.roundingIncrement = 0.01
numberFormatter.numberStyle = NSNumberFormatterStyle.DecimalStyle
let number = numberFormatter.numberFromString("93.9")

number gets set to 93.9000000000001, not 93.9. How can I get it to set the correct value for number?

Upvotes: 0

Views: 100

Answers (2)

Siyu Song
Siyu Song

Reputation: 917

There is a factory method defined on NSDecimalNumber that takes a string:

+ (NSDecimalNumber *)decimalNumberWithString:(NSString *)numericString

Example:

$ swift
Welcome to Apple Swift version 2.1.1 (swiftlang-700.1.101.15 clang-700.1.81). Type :help for assistance.
  1> import Foundation
  2> NSDecimalNumber(string: "93.9")
$R0: NSDecimalNumber = 93.9
  3>

Upvotes: 1

Pradeep K
Pradeep K

Reputation: 3661

Replace the last line with

let number = numberFormatter.numberFromString("93.7")?.floatValue

Upvotes: 0

Related Questions