Reputation: 809
I am facing an issue where I need to do some calculations with a number like for example 5000,00 multiplied it by (1,025^3).
So in this case 5000,00 * (1,025^3) = 5385,45
So my question is, how can I format the number 5385,45 to be like 5.385,45 using decimal format maybe?
I tried by myself and I did this piece of code that outputs 5385,45 in the app but not 5.385,45
var interestValue = (5000,00*(Math.pow(1.025,yearValue)))
val number = java.lang.Double.valueOf(interestValue)
val dec = DecimalFormat("#,00")
val credits = dec.format(number)
vValueInterest.text = credits
Upvotes: 51
Views: 103905
Reputation: 1950
I needed to do something similar but for Kotlin Multiplatform (KMM). I struggled to find a multiplatform solution so I thought I'd post the one I came up with here:
// Common
expect fun Double.formatDecimal(maxFractionDigits: Int = 2): String
// Android
import java.text.DecimalFormat
actual fun Double.formatDecimal(maxFractionDigits: Int): String =
DecimalFormat().apply {
isGroupingUsed = false
minimumFractionDigits = 0
maximumFractionDigits = maxFractionDigits
isDecimalSeparatorAlwaysShown = false
}.format(this)
// iOS
import kotlinx.cinterop.convert
import platform.Foundation.NSNumber
import platform.Foundation.NSNumberFormatter
import platform.Foundation.NSNumberFormatterDecimalStyle
actual fun Double.formatDecimal(maxFractionDigits: Int): String =
NSNumberFormatter().apply {
minimumFractionDigits = 0u
maximumFractionDigits = maxFractionDigits.convert()
numberStyle = NSNumberFormatterDecimalStyle
}.stringFromNumber(number = NSNumber(double = this)) ?: ""
Upvotes: 11
Reputation: 12728
The "most Kotlin-esque" way I found to do this sort of formatting is:
"%,.2f".format(Locale.GERMAN, 1234.5678) // => "1.234,57"
"%,.2f".format(Locale.ENGLISH, 1234.5678) // => "1,234.57"
"%,.2f".format(1234.5678) // => "1,234.57" for me, in en_AU
Note though that even though this is Kotlin's own extension method on String
, it still only works on the JVM.
For those looking for a multiplatform implementation (as I was), mp_stools is one option.
Upvotes: 31
Reputation: 51
Used:
%.numberf
fun main(args: Array<String>) {
var A: Double
A = readLine()!!.toDouble()
var bla = A*A
var calculator = 3.14159 * bla
println("A=%.4f".format(calculator))
}
Upvotes: 5
Reputation: 1010
val num = 1.34567
val df = DecimalFormat("#.##")
df.roundingMode = RoundingMode.CEILING
println(df.format(num))
When you run the program, the output will be: 1.34
Check: https://www.programiz.com/kotlin-programming/examples/round-number-decimal
Upvotes: 30
Reputation: 164194
This is the format you need:
val dec = DecimalFormat("#,###.##")
will print:
5.384,45
if you need always exactly 2 digits after the decimal point:
val dec = DecimalFormat("#,###.00")
Upvotes: 64
Reputation: 439
Try val dec = DecimalFormat("#.###,00")
. For examples of DecimalFormat check this link.
Upvotes: 3