taler-ios

iOS apps for GNU Taler (wallet)
Log | Files | Refs | README | LICENSE

commit d02a14e2289465d8fd5c14cff89c272005ef4a96
parent 2b0249b5aa353c8a58e34f7abc35edc8d1abfbaa
Author: Marc Stibane <marc@taler.net>
Date:   Sun, 12 Nov 2023 13:16:36 +0100

DD51 Currency rendering

Diffstat:
MTalerWallet1/Helper/CurrencySpecification.swift | 22+++++++++++++++++++++-
Mtaler-swift/Sources/taler-swift/Amount.swift | 6+++++-
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) }