iOS Swift 中小数点从右向左移动 5.3

Move numbers from right to left of a decimal point in iOS Swift 5.3

我正在尝试让我的数字(取自自定义按钮输入)从右向左移动,保留两位小数。我使用 10 个按钮 (0-9),并在 buttonInput 上附加了发件人标签,我希望 labelText 标签中显示从右到左的十进制数。我知道您可以使用文本字段来完成此操作,但我想使用我的自定义按钮。

期望的结果: 用户点击 1 个按钮,labelText 变为 $0.01; 用户点击 2 按钮,labelText 变为 $0.12;等..

Xcode 版本 12.1; Swift 版本 5.3

这是我目前所了解的。我是 Swift 的新手,请放轻松!

@IBOutlet weak var labelText: UILabel!

override func viewDidLoad() {
    super.viewDidLoad()
}

@IBAction func numPad(_ sender: UIButton) {
    //button number
    let buttonInput = Double(sender.tag - 1)
    
    //label text to number conversion
    let labelValue = labelText.text
    let intValue = Double(labelValue!)
    
    //move number to the right of decimal
    //let addedValue = (intValue! * 0.10) + buttonInput
    let addedValue = intValue! + buttonInput
    
    let numForm = NumberFormatter()
    numForm.numberStyle = .decimal
    //numForm.currencySymbol = "$"
    numForm.minimumIntegerDigits = 0
    numForm.maximumIntegerDigits = 4
    numForm.maximumFractionDigits = 2
    numForm.minimumFractionDigits = 2
    
    labelText.text = numForm.string(for: addedValue)
}

您只需将按钮标签转换为 Double,除以 100,然后将其与标签的当前值乘以 10 相加即可:

let cents = Double(sender.tag - 1)/100
print("cents", cents)
let oldValue = (Double(labelText.text!) ?? .zero) * 10
print("oldValue", oldValue)
let newValue = oldValue + cents
print("newValue", newValue)

注意:您永远不应使用 UI 来保存值,而只能用于显示它们。我还会使用 Decimal 而不是 Double 来保留其小数位精度:


var labelValue: Decimal = .zero

let cents = Decimal(sender.tag - 1)/100
print("cents", cents)
let newValue = labelValue * 10
print("newValue", newValue)
labelValue = newValue + cents
print("labelValue", labelValue)
let numForm = NumberFormatter()
numForm.numberStyle = .decimal
numForm.minimumIntegerDigits = 1
numForm.maximumIntegerDigits = 4
numForm.maximumFractionDigits = 2
numForm.minimumFractionDigits = 2

labelText.text = numForm.string(for: labelValue)