money-module/src/main/kotlin/com/cubetiqs/money/DecimalUtils.kt

61 lines
1.7 KiB
Kotlin

package com.cubetiqs.money
import java.text.DecimalFormat
import java.lang.StringBuilder
import java.math.RoundingMode
/**
* Java Decimal utils
*
* @author sombochea
* @since 1.0
*/
object DecimalUtils {
private const val DECIMAL_PATTERN = "#.##"
private const val ROUNDING_DECIMAL_PATTERN = "##0"
fun toStringDecimal(value: Number?, pattern: String?): String {
var _pattern = pattern
if (_pattern == null || _pattern.isEmpty()) {
_pattern = DECIMAL_PATTERN
}
return DecimalFormat(_pattern).format(value)
}
fun toStringDecimal(value: Number?, pattern: String?, roundingMode: RoundingMode?): String {
var _pattern = pattern
if (_pattern == null || _pattern.isEmpty()) {
_pattern = DECIMAL_PATTERN
}
if (roundingMode == null) {
return toStringDecimal(value, _pattern)
}
val formatter = DecimalFormat(_pattern)
formatter.roundingMode = roundingMode
return formatter.format(value)
}
fun toDecimalPrecision(value: Number?, precision: Int? = null, roundingMode: RoundingMode? = null): String? {
var _precision = precision ?: -1
if (value == null) {
return null
}
val pattern = StringBuilder(ROUNDING_DECIMAL_PATTERN)
if (_precision > 0) {
pattern.append(".")
}
while (_precision > 0) {
pattern.append("0")
_precision--
}
val decimalFormat = DecimalFormat(pattern.toString())
if (roundingMode != null) {
decimalFormat.roundingMode = roundingMode
}
return decimalFormat.format(value)
}
}