【发布时间】:2020-07-17 14:05:10
【问题描述】:
我正在尝试在 SwiftUI 中创建一个简单的 TextField,它将提供的值格式化为货币的有效值。我需要将值四舍五入为 2 位数。并使用 Core Data 存储四舍五入的值(我知道该怎么做,我使用的是 Decimal 类型,顺便说一句)。
到目前为止,我有这个:
import SwiftUI
struct ContentView: View {
@State private var newValueAsString = ""
@State private var value: NSDecimalNumber = 0
let decimalBehavior = NSDecimalNumberHandler(roundingMode: .plain, scale: 2, raiseOnExactness: false, raiseOnOverflow: false, raiseOnUnderflow: false, raiseOnDivideByZero: true)
var body: some View {
VStack {
TextField("0", text: $newValueAsString, onCommit: {
self.value = NSDecimalNumber(string: self.newValueAsString).rounding(accordingToBehavior: self.decimalBehavior)
print("\(self.value)")
}
)
.multilineTextAlignment(.trailing)
.font(Font.system(size: 30))
.keyboardType(.decimalPad)
// Just to test. Later I will save the value to Core Data.
Text("\(self.value)")
}
.padding()
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
问题
当 iOS 区域使用逗号而不是点(例如,波兰)时,它无法正常工作。十进制键盘有“,”而不是“。”当我使用“,”时,数字没有正确四舍五入。 123,456 变为 123。而使用点的区域(例如,美国)123.456 变为 123.46,如预期的那样。
我在这里缺少什么?我的猜测是 NumberFormatter,但我无法让它工作。
【问题讨论】:
-
请注意,它是。只存储 2 位数的汇率是个坏主意,以日元为例,例如 0.008 欧元或 0.009 美元
-
哦,感谢您指出这一点。所以我应该根据货币四舍五入吗?我需要研究如何去做。
标签: ios swift core-data swiftui currency