         nf.maximumFractionDigits = fractionDigits
         nf.numberStyle = .decimal
         nf.usesGroupingSeparator = true
-        
+
         let stringValue = nf.string(from: NSNumber(value: value))
         return stringValue ?? nf.string(from: 0)!
     }
-    
+
     func updatedComponentString(value: Double, intDigits: Int, fractionDigits: Int) -> String {
         let nf = NumberFormatter()
         nf.locale = locale

        nf.maximumFractionDigits = fractionDigits
        nf.numberStyle = .decimal
        nf.usesGroupingSeparator = true
        
        let stringValue = nf.string(from: NSNumber(value: value))
        return stringValue ?? nf.string(from: 0)!
    }
    
    func updatePicker() {
        picker.reloadAllComponents()
        var index = 0
        
        for char in componentsString.characters {
            // Row is the numeric value of the digit string, or zero for separators
            let row = Int(String(char)) ?? 0

        picker.dataSource = self
        addSubview(picker)
    }

    required public init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        picker.delegate = self
        picker.dataSource = self
        addSubview(picker)
    }

    convenience public init() {
        self.init(frame: CGRect.zero)
    }

    func widthOfPickerView() -> CGFloat {
        let componentWidth: CGFloat! = picker.delegate?.pickerView!(picker, widthForComponent: 0)
        let componentCount = CGFloat((picker.dataSource?.numberOfComponents(in: picker))!)
        return componentCount * componentWidth + (componentCount - 1) * (componentWidth / 2) // Account for spacing between components
    }

    func updatedDisplayString(value: Double, fractionDigits: Int) -> String {
        let nf = NumberFormatter()
        nf.locale = locale
