commit d02a14e2289465d8fd5c14cff89c272005ef4a96
parent 2b0249b5aa353c8a58e34f7abc35edc8d1abfbaa
Author: Marc Stibane <marc@taler.net>
Date: Sun, 12 Nov 2023 13:16:36 +0100
DD51 Currency rendering
Diffstat:
2 files changed, 26 insertions(+), 2 deletions(-)
diff --git a/TalerWallet1/Helper/CurrencySpecification.swift b/TalerWallet1/Helper/CurrencySpecification.swift
@@ -8,11 +8,31 @@ import taler_swift
extension Amount {
func string(_ currencyInfo: CurrencyInfo?) -> String {
if let currencyInfo {
- return currencyInfo.string(for: valueAsTuple)
+ return currencyInfo.string(for: valueAsFloatTuple)
} else {
return valueStr
}
}
+
+ func inputDigits(_ currencyInfo: CurrencyInfo) -> UInt {
+ let inputDigits = currencyInfo.specs.fractionalInputDigits
+ if inputDigits < 0 { return 0 }
+ if inputDigits > 8 { return 8}
+ return UInt(inputDigits)
+ }
+
+ func addDigit(_ digit: UInt8, currencyInfo: CurrencyInfo) {
+ shiftLeft(add: digit, inputDigits(currencyInfo))
+ }
+
+ func removeDigit(_ currencyInfo: CurrencyInfo) {
+ shiftRight() // divide by 10
+ mask(inputDigits(currencyInfo)) // replace all digits after #inputDigit with 0
+ }
+
+ func plainString(_ currencyInfo: CurrencyInfo) -> String {
+ return plainString(inputDigits: inputDigits(currencyInfo))
+ }
}
public struct CurrencyInfo {
diff --git a/taler-swift/Sources/taler-swift/Amount.swift b/taler-swift/Sources/taler-swift/Amount.swift
@@ -113,7 +113,11 @@ public final class Amount: Codable, Hashable, @unchecked Sendable, CustomStringC
}
/// The tuple representation of the value.
- public var valueAsTuple: (Double, Double) {
+ public var valueAsDecimalTuple: (UInt64, UInt32) {
+ (integer, fraction)
+ }
+ /// The tuple representation of the value.
+ public var valueAsFloatTuple: (Double, Double) {
(intValue, fracValue)
}