# Round Double to 1 decimal place kotlin: from 0.044999 to 0.1

We Are Going To Discuss About Round Double to 1 decimal place kotlin: from 0.044999 to 0.1. So lets Start this Java Article.

## Round Double to 1 decimal place kotlin: from 0.044999 to 0.1

1. Round Double to 1 decimal place kotlin: from 0.044999 to 0.1

Finally I did what `Andy Turner` suggested, rounded to 3 decimals, then to 2 and then to 1:
`val number:Double = 0.0449999 val number3digits:Double = String.format("%.3f", number).toDouble() val number2digits:Double = String.format("%.2f", number3digits).toDouble() val solution:Double = String.format("%.1f", number2digits).toDouble()`

2. Round Double to 1 decimal place kotlin: from 0.044999 to 0.1

Finally I did what `Andy Turner` suggested, rounded to 3 decimals, then to 2 and then to 1:
`val number:Double = 0.0449999 val number3digits:Double = String.format("%.3f", number).toDouble() val number2digits:Double = String.format("%.2f", number3digits).toDouble() val solution:Double = String.format("%.1f", number2digits).toDouble()`

## Solution 1

Finally I did what `Andy Turner` suggested, rounded to 3 decimals, then to 2 and then to 1:

``````val number:Double = 0.0449999
val number3digits:Double = String.format("%.3f", number).toDouble()
val number2digits:Double = String.format("%.2f", number3digits).toDouble()
val solution:Double = String.format("%.1f", number2digits).toDouble()
``````

``````val number:Double = 0.0449999
val number3digits:Double = Math.round(number * 1000.0) / 1000.0
val number2digits:Double = Math.round(number3digits * 100.0) / 100.0
val solution:Double = Math.round(number2digits * 10.0) / 10.0
``````

Result:

0.045 → 0.05 → 0.1

Note: I know it is not how it should work but sometimes you need to round up taking into account all decimals for some special cases so maybe someone finds this useful.

Original Author edited Apr 10, 2020 at 10:52 Of This Content

## Solution 2

The `BigDecimal` rounding features several `RoundingMode`s, including those rounding up (away from zero) or towards positive infinity. If that’s what you need, you can perform rounding by calling `setScale` as follows:

``````val number = 0.0449999
val rounded = number.toBigDecimal().setScale(1, RoundingMode.UP).toDouble()
println(rounded) // 0.1
``````

Note, however, that it works in a way that will also round anything between `0.0` and `0.1` to `0.1` (e.g. `0.00001``0.1`).

The `.toBigDecimal()` extension is available since Kotlin 1.2.

Original Author hotkey Of This Content

## Solution 3

I know some of the above solutions work perfectly but I want to add another solution that uses ceil and floor concept, which I think is optimized for all the cases.

If you want the highest value of the 2 digits after decimal use below code.

``````import java.math.BigDecimal
import java.math.RoundingMode
import java.text.DecimalFormat
``````

here, 1.45678 = 1.46

``````fun roundOffDecimal(number: Double): Double? {
val df = DecimalFormat("#.##")
df.roundingMode = RoundingMode.CEILING
return df.format(number).toDouble()
}
``````

If you want the lowest value of the 2 digits after decimal use below code.

here, 1.45678 = 1.45

``````fun roundOffDecimal(number: Double): Double? {
val df = DecimalFormat("#.##")
df.roundingMode = RoundingMode.FLOOR
return df.format(number).toDouble()
}
``````

Here a list of all available flags: `CEILING`, `DOWN`, `FLOOR`, `HALF_DOWN`, `HALF_EVEN`, `HALF_UP`, `UNNECESSARY`, `UP`

The detailed information is given in docs

Original Author Gaurang Goda Of This Content

## Solution 4

1. Method (using Noelia’s idea):

You can pass the number of desired decimal places in a string template and make the precision variable this way:

``````fun Number.roundTo(
numFractionDigits: Int
) = "%.\${numFractionDigits}f".format(this, Locale.ENGLISH).toDouble()
``````

2. Method (numeric, no string conversion)

``````fun Double.roundTo(numFractionDigits: Int): Double {
val factor = 10.0.pow(numFractionDigits.toDouble())
return (this * factor).roundToInt() / factor
}
``````

One could create an overload for `Float` as well.

Original Author Willi Mentzel Of This Content