这是强制性的“我是编程新手”,但是,我搜索了所有可用的答案并得出结论,我的问题可能比代码更与逻辑相关,但我也可能错了。我正在构建一个计算器应用程序,除了显示中的numberFormatter
(显示逗号分隔符)外,一切正常。每当我尝试格式化显示器中的数字时,我无法让显示器显示小数点和逗号。
如果我以十进制 .1234 开头,我得到 0.1234,如果我输入 12345,我得到 12,345,但如果我输入 12345.678,我得到 12,345。我正在丢失小数点。我已经测试过它和我的功能来删除无关的“。” 似乎不是问题。如果我numberFormatter
在标签格式控件之外运行字符串扩展,它似乎可以工作,但我需要防止多个小数和无关的“0”。
我正在向 IBAction 显示代码,覆盖显示标签上显示的按钮,display.text
这就是问题所在。此后的所有计算工作正常,replacingOccurrences(of: ",", with: "")
创建一个干净的字符串以转换为 Double 并计算。
我正在使用 sting 扩展来进行格式化。我已经为此工作了好几个星期。有任何想法吗?我是否必须重构如何将文本输入到label.text
?
这是将文本添加到UILabel display
.
@IBAction func btnTouchDigit(_ sender: UIButton) {
let digit = sender.currentTitle!
if isUserTyping {
var formattedNumber = ""
print( "is user typting + String\(isUserTyping)")
// make sure we aren't adding a second period
var textCurrentlyInDisplay = display.text
textCurrentlyInDisplay = textCurrentlyInDisplay?.replacingOccurrences(of: ",", with: "")
if digit == "." && ((textCurrentlyInDisplay?.range(of: ".")) != nil) {
return
}
else {
formattedNumber = (textCurrentlyInDisplay! + digit)
print("formattedNumber = \(formattedNumber.twoFractionDigits)")
display.text = formattedNumber.twoFractionDigits
// put code here to format label.text to show thousand seperators
print("textCurrentlyInDisplay end = \(textCurrentlyInDisplay!)")
}
}
// make sure we aren't entering a bunch of zero's
else { print("else + \(isUserTyping)")
display.text = digit
if digit == "0" {return}
else if digit == "." {display.text = "0."}
// display.text = (digit == "." ? "0" : "") + digit
isUserTyping = true
}
}
这是我处理numberFormatter
.
extension String {
var twoFractionDigits: String {
let styler = NumberFormatter()
styler.minimumFractionDigits = 0
styler.maximumFractionDigits = 16
styler.numberStyle = .decimal
let converter = NumberFormatter()
converter.decimalSeparator = "."
if let result = converter.number(from: self) {
return styler.string(from: result)!
}
return ""
}