From b5db44764b5bcb2757d5465e38fc6f98c152d109 Mon Sep 17 00:00:00 2001 From: Raihan Ariq <202310715297@mhs.ubharajaya.ac.id> Date: Thu, 6 Nov 2025 23:30:23 +0700 Subject: [PATCH] Pengkategorian Hasil BMI --- .../com/example/bmicalculator/MainActivity.kt | 25 +++++++++++++------ 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/com/example/bmicalculator/MainActivity.kt b/app/src/main/java/com/example/bmicalculator/MainActivity.kt index 256387b..399901a 100644 --- a/app/src/main/java/com/example/bmicalculator/MainActivity.kt +++ b/app/src/main/java/com/example/bmicalculator/MainActivity.kt @@ -66,6 +66,7 @@ import androidx.compose.ui.unit.dp import com.example.bmicalculator.ui.theme.BMICalculatorTheme import java.text.DecimalFormat import java.text.NumberFormat +import java.util.Locale import kotlin.math.pow class MainActivity : ComponentActivity() { @@ -100,7 +101,7 @@ fun BMICalculatorLayout() { val BmiHeight = heightInput.toDoubleOrNull() ?: 0.0 val BmiWeight = weightInput.toDoubleOrNull() ?: 0.0 val bmi = calculateBMI(BmiHeight, BmiWeight, unitUSC) - val category = calculateBMICategory(BmiHeight, BmiWeight, unitUSC) + val category = calculateBMICategory(bmi) Column( modifier = Modifier @@ -212,29 +213,37 @@ private fun calculateBMI(BmiHeight: Double, BmiWeight: Double, unitUSC: Boolean) return "0" } - val heightInMeter = BmiHeight/100 // konversi centimeter ke meter + val heightInMeter = BmiHeight/100 // konversi centimeter ke meter var bmi = BmiWeight / heightInMeter.pow(2) if (unitUSC == true) { bmi = 703 * (BmiWeight / BmiHeight.pow(2)) } - + val df = DecimalFormat("#.#") return df.format(bmi) } /** * Calculates the BMI Category + * bmi < 18.5 -> Underweight + * 18.5 <= bmi < 25 -> Normal + * 25 <= bmi <= 30 -> Normal + * bmi > 30 -> Overweight * * Catatan: tambahkan unit test untuk kalkulasi BMI ini */ +private fun calculateBMICategory(bmi: String): String { + val bmiValue = bmi.replace(",", ".").toDoubleOrNull() ?: return "" -private fun calculateBMICategory(BmiHeight: Double, BmiWeight: Double = 15.0, unitUSC: Boolean): String { - var bmi = BmiWeight / 100 * BmiHeight - if (unitUSC) { - bmi = kotlin.math.ceil(bmi) + return when { + bmiValue == 0.0 -> "" + bmiValue < 18.5 -> "Underweight" + bmiValue < 25.0 -> "Normal" + bmiValue < 30.0 -> "Overweight" + else -> "Obesity" } - return NumberFormat.getNumberInstance().format(bmi) } + @Preview(showBackground = true) @Composable fun TipTimeLayoutPreview() {