如何格式化我的号码?

时间:2017-06-14 22:31:00

标签: swift

var displayValue: Double {
    get {
        return Double(display.text!)!
    }

    set {
        display.text = formatCurrency(value: newValue)
    }
}

func formatCurrency(value: Double) -> String {
    let formatter = NumberFormatter()
    formatter.numberStyle = .decimal
    formatter.alwaysShowsDecimalSeparator = false
    formatter.decimalSeparator = ","
    formatter.maximumFractionDigits = 2;
    formatter.locale = Locale(identifier: Locale.current.identifier)
    let result = formatter.string(from: value as NSNumber);
    return result!;
}

private var brain = CalculatorBrain()

@IBAction func touchDigit(_ sender: UIButton) {
    let digit = sender.currentTitle!
    if userIsInTheMiddleOfTyping {
        let textCurrentlyInDisplay = display.text!
        display.text = textCurrentlyInDisplay + digit
    } else {
        display.text = digit
        userIsInTheMiddleOfTyping = true
    }
}

每当我触摸我的按钮时,标签都没有更新。 我想让“显示标签”看起来不错,所以我使用的是NumberFormatter并设置了格式化程序的属性

我试过这个

let result = String(displayValue) + formatter.string(from: value as NSNumber)!;

在我的formatCurreny函数中,但我的应用程序的行为不允许我按+, - (或操作键)

1 个答案:

答案 0 :(得分:0)

因为您在display的设置器中设置了displayValue标签的格式,但您从未设置该属性。

如果您希望计算器的显示效果看起来不错,那么您需要管理3个变量:

  • 无格式文字,用于将数字附加到显示屏
  • 格式化的文本,您希望在带有小数分隔符的标签上显示,等等
  • displayValue
  • 使用的DoubleCalculatorBrain

您可以围绕无格式文本设计其他2个变量,如下所示:

var unformattedText: String = "" {
    didSet {
        display.text = formatCurrency(value: displayValue)
    }
}
var displayValue: Double {
    get {
        return Double(unformattedText)!
    }
    set {
        unformattedText = String(newValue)
    }
}

@IBAction func touchDigit(_ sender: UIButton) {
    let digit = sender.currentTitle!
    if userIsInTheMiddleOfTyping {
        unformattedText += digit
    } else {
        unformattedText = digit
        userIsInTheMiddleOfTyping = true
    }
}
相关问题