方案一:
import java.text.NumberFormat class CompareHashMap { def regEx_Numeric = '-?[1-9]\d*$|-?([1-9]\d*\.\d*|0\.\d*|0?\.0+|0)$' def regEx_ScientificNotation = '^((-?\d+.?\d*)[Ee]{1}(-?\d+))$' //科学计数法正则表达式 int decimalPrecision = 5 //Compare 5 decimal places CompareHashMap(){ } def formatDecimalPrecision(def dataValue){ NumberFormat format = NumberFormat.getNumberInstance() format.setMaximumFractionDigits(decimalPrecision) dataValue = dataValue.toString() if(dataValue.matches(regEx_ScientificNotation)){ BigDecimal db = new BigDecimal(dataValue) dataValue = db.toPlainString() } if(dataValue.matches(regEx_Numeric)){ //Switch String to double firstly dataValue = Double.parseDouble(dataValue) dataValue = format.format(dataValue) } return dataValue } }
方案二:
def formatDecimalPrecision(def dataValue, int decimalPrecision){ NumberFormat format = NumberFormat.getNumberInstance() format.setMaximumFractionDigits(decimalPrecision) dataValue = dataValue.toString() if(dataValue.isBigDecimal()){ dataValue = new BigDecimal(dataValue).toPlainString() } def regEx_Numeric = '-?[1-9]\d*$|-?([1-9]\d*\.\d*|0\.\d*|0?\.0+|0)$' if(dataValue.matches(regEx_Numeric)){ //Switch String to double firstly dataValue = Double.parseDouble(dataValue) dataValue = format.format(dataValue) } return dataValue }