修正 Kotlin 四捨五入(原本 kotlin.math.round 是銀行家捨入,改用 BigDecimal HALF_UP)

This commit is contained in:
Timmy
2026-04-17 13:10:27 +08:00
parent a71fb544d3
commit 6b7eab1095

View File

@@ -47,8 +47,11 @@ import androidx.compose.ui.unit.sp
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
import java.math.BigDecimal
import java.math.RoundingMode
import java.net.HttpURLConnection import java.net.HttpURLConnection
import java.net.URL import java.net.URL
import java.text.DecimalFormat
import java.text.SimpleDateFormat import java.text.SimpleDateFormat
import java.util.Date import java.util.Date
import java.util.Locale import java.util.Locale
@@ -82,13 +85,14 @@ private fun fetchRates(): List<Rate> {
private fun parseAmount(s: String): Double? = private fun parseAmount(s: String): Double? =
s.filter { it != ',' && !it.isWhitespace() }.takeIf { it.isNotEmpty() }?.toDoubleOrNull() s.filter { it != ',' && !it.isWhitespace() }.takeIf { it.isNotEmpty() }?.toDoubleOrNull()
private fun formatTwd(v: Double): String { private fun roundHalfUp(v: Double): BigDecimal =
val rounded = kotlin.math.round(v * 100.0) / 100.0 BigDecimal.valueOf(v).setScale(2, RoundingMode.HALF_UP)
return "%,.2f".format(rounded)
} private fun formatTwd(v: Double): String =
DecimalFormat("#,##0.00").format(roundHalfUp(v))
private fun formatTwdRaw(v: Double): String = private fun formatTwdRaw(v: Double): String =
"%.2f".format(kotlin.math.round(v * 100.0) / 100.0) roundHalfUp(v).toPlainString()
class MainActivity : ComponentActivity() { class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {