From 5b7bb5cf012fc41b2fbb6a41f6f858009c1ba092 Mon Sep 17 00:00:00 2001 From: Sebastian Date: Wed, 15 Jun 2022 14:53:39 -0300 Subject: accept decimal and bitcoin exchanges --- taler-kotlin-android/src/main/java/net/taler/common/Amount.kt | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'taler-kotlin-android/src/main/java/net/taler/common/Amount.kt') diff --git a/taler-kotlin-android/src/main/java/net/taler/common/Amount.kt b/taler-kotlin-android/src/main/java/net/taler/common/Amount.kt index a36c0ab..18fb6cb 100644 --- a/taler-kotlin-android/src/main/java/net/taler/common/Amount.kt +++ b/taler-kotlin-android/src/main/java/net/taler/common/Amount.kt @@ -56,12 +56,19 @@ public data class Amount( public companion object { private const val FRACTIONAL_BASE: Int = 100000000 // 1e8 + public val SEGWIT_MIN = Amount("BTC", 0, 294) private val REGEX_CURRENCY = Regex("""^[-_*A-Za-z0-9]{1,12}$""") public val MAX_VALUE: Long = 2.0.pow(52).toLong() private const val MAX_FRACTION_LENGTH = 8 public const val MAX_FRACTION: Int = 99_999_999 + public fun fromDouble(currency: String, value: Double): Amount { + val intPart = Math.floor(value).toLong() + val fraPart = Math.floor((value - intPart) * FRACTIONAL_BASE).toInt() + return Amount(currency, intPart, fraPart) + } + public fun zero(currency: String): Amount { return Amount(checkCurrency(currency), 0, 0) } @@ -141,6 +148,10 @@ public data class Amount( return result } + public fun withCurrency(currency: String): Amount { + return Amount(checkCurrency(currency), this.value, this.fraction) + } + public operator fun minus(other: Amount): Amount { check(currency == other.currency) { "Can only subtract from same currency" } var resultValue = value -- cgit v1.2.3