1、Java版本
点击查看代码
| import com.github.pagehelper.util.StringUtil; |
| import static cn.hutool.core.convert.Convert.toStr; |
| import static org.springframework.util.ObjectUtils.isEmpty; |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| public static String evenRound(Object value, Object places, Object even) { |
| if (places == null || even == null) { |
| String value2 = toStr(value); |
| return value2; |
| } |
| String value2 = toStr(value); |
| String places2 = toStr(places); |
| String even2 = toStr(even); |
| |
| if (StringUtil.isEmpty(value2) || StringUtil.isEmpty(places2) || StringUtil.isEmpty(even2)) return value2; |
| try { |
| BigDecimal num = new BigDecimal(value2); |
| Integer decimalPlaces = 0; |
| |
| Integer evenRound = (even2.indexOf("五") > -1 || even2.indexOf("5") > -1 || even2.indexOf("伍") > -1) ? 5 : 6; |
| |
| if (places2.equals("0.5")) { |
| |
| |
| BigDecimal rule = new BigDecimal("2"); |
| |
| decimalPlaces = 0; |
| if (evenRound == 5) { |
| |
| value2 = ((num.multiply(rule)).setScale(decimalPlaces, BigDecimal.ROUND_HALF_UP).divide(rule, 4, BigDecimal.ROUND_HALF_UP)).toString(); |
| } else { |
| |
| value2 = ((num.multiply(rule)).setScale(decimalPlaces, BigDecimal.ROUND_HALF_EVEN).divide(rule, 4, BigDecimal.ROUND_HALF_EVEN)).toString(); |
| } |
| value2 = numDecimal(value2, 1); |
| } else if (places2.equals("5")) { |
| |
| |
| BigDecimal rule = new BigDecimal("0.2"); |
| |
| decimalPlaces = 0; |
| if (evenRound == 5) { |
| |
| value2 = ((num.multiply(rule)).setScale(decimalPlaces, BigDecimal.ROUND_HALF_UP).divide(rule, 4, BigDecimal.ROUND_HALF_UP)).toString(); |
| } else { |
| |
| value2 = ((num.multiply(rule)).setScale(decimalPlaces, BigDecimal.ROUND_HALF_EVEN).divide(rule, 4, BigDecimal.ROUND_HALF_EVEN)).toString(); |
| } |
| value2 = numDecimal(value2, 0); |
| } else if (places2.equals("10")) { |
| |
| |
| BigDecimal rule = new BigDecimal("10"); |
| |
| decimalPlaces = 0; |
| if (evenRound == 5) { |
| |
| value2 = ((num.divide(rule)).setScale(decimalPlaces, BigDecimal.ROUND_HALF_UP).multiply(rule)).toString(); |
| } else { |
| |
| value2 = ((num.divide(rule)).setScale(decimalPlaces, BigDecimal.ROUND_HALF_EVEN).multiply(rule)).toString(); |
| } |
| } else { |
| |
| String[] split = places2.split("\\."); |
| if (split.length > 1) { |
| |
| decimalPlaces = split[1].length(); |
| } |
| if (evenRound == 5) { |
| |
| value2 = num.setScale(decimalPlaces, BigDecimal.ROUND_HALF_UP).toString(); |
| } else { |
| |
| value2 = num.setScale(decimalPlaces, BigDecimal.ROUND_HALF_EVEN).toString(); |
| } |
| value2 = numDecimal(value2, decimalPlaces); |
| } |
| } catch (Exception e) { |
| System.err.println(value + "," + places + "," + even + "\t修约规则有误:" + e.getMessage()); |
| } |
| return value2; |
| |
| |
| |
| |
| |
| |
| } |
| |
| |
| |
| |
| |
| |
| |
| public static String numDecimal(String num, int len) { |
| num = org.springframework.util.ObjectUtils.isEmpty(num) ? "0" : toStr(num); |
| len = org.springframework.util.ObjectUtils.isEmpty(len) ? 0 : len; |
| if (len == 0) return num.split("\\.")[0]; |
| String decimal; |
| if (num.indexOf(".") == -1 && len != 0) num += ".0"; |
| String[] split = num.split("\\."); |
| decimal = split[1]; |
| num = split[0]; |
| if (decimal.length() > len) { |
| decimal = decimal.substring(0, len); |
| } else { |
| while (decimal.length() != len) { |
| decimal += "0"; |
| } |
| } |
| return num + "." + decimal; |
| } |
2、JavaScript版本
点击查看代码
| |
| |
| |
| |
| |
| |
| |
| export function sixRound(num, decimalPlaces) { |
| let d = decimalPlaces || 0; |
| let m = Math.pow(10, d); |
| let n = +(d ? num * m : num).toFixed(8); |
| let i = Math.floor(n), f = n - i; |
| let e = 1e-8; |
| let r = (f > 0.5 - e && f < 0.5 + e) ? |
| ((i % 2 === 0) ? i : i + 1) : Math.round(n); |
| return d ? r / m : r; |
| } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~