Atul Gupta
06/17/2024, 1:22 PMdouble money = 100.1;
NumberFormat formatter = NumberFormat.getCurrencyInstance();
String moneyString = formatter.format(money);
System.out.println(moneyString);
swanti
06/17/2024, 4:04 PMAtul Gupta
06/17/2024, 8:24 PMswanti
06/17/2024, 9:41 PMAtul Gupta
06/18/2024, 4:55 PMsunragav
03/19/2025, 11:33 PMsunragav
03/20/2025, 7:23 PMexpect/actual
route.
iosMain
import platform.Foundation.NSLocale
import platform.Foundation.NSNumber
import platform.Foundation.NSNumberFormatter
import platform.Foundation.NSNumberFormatterCurrencyStyle
private val formatter = NSNumberFormatter().apply {
locale = NSLocale(localeIdentifier = "DE")
currencyCode = "eur"
numberStyle = NSNumberFormatterCurrencyStyle
}
actual fun parseFormattedStringToCents(formattedAmount: String): BigInteger {
return BigInteger(formatter.numberFromString(formattedAmount)?.longValue ?: 0L)
}
actual fun formatMoney(amount: Double): String {
val number = NSNumber(amount)
return formatter.stringFromNumber(number) ?: ""
}
-----------------------------------------------------------
commonMain
import com.ionspin.kotlin.bignum.integer.BigInteger
const val defaultFractionDigits = 2
object MoneyFormatter {
private fun format(value: Double?, forceSign: Boolean = false, forceNegativeSignForZero: Boolean = false): String {
if (value == null) {
return ""
}
val valueAsString = formatMoney(value)
return if (value > 0 && forceSign) {
"+$valueAsString"
} else if (forceNegativeSignForZero && value.let { it == 0.0}) {
"-$valueAsString"
} else {
valueAsString
}
}
fun formatCents(valueInCents: BigInteger) = format(valueInCents.doubleValue() / getFractionDivider().intValue())
fun parseToCents(formattedMoneyString: String): BigInteger = parseFormattedStringToCents(formattedMoneyString)
private fun getFractionDivider(): BigInteger {
var fractionDigits = defaultFractionDigits
if (fractionDigits < 1) fractionDigits = 0
return BigInteger.TEN.pow(fractionDigits)
}
}
expect fun parseFormattedStringToCents(formattedAmount: String): BigInteger
expect fun formatMoney(amount: Double): String
-----------------------------------------------------------------------------------------------
androidMain
import java.text.DecimalFormat
import java.text.NumberFormat
import java.util.Locale
private val decimalFormat: DecimalFormat = NumberFormat.getCurrencyInstance(Locale.GERMANY) as DecimalFormat
actual fun parseFormattedStringToCents(formattedAmount: String): BigInteger =
BigInteger(decimalFormat.parse(formattedAmount)?.toLong() ?: 0L)
actual fun formatMoney(amount: Double): String =
decimalFormat.format(amount)
Also, posted it here: https://kotlinlang.slack.com/archives/C3PQML5NU/p1742498505316619?thread_ts=1742424885.673259&cid=C3PQML5NUAtul Gupta
03/21/2025, 6:14 AM