You need to enable JavaScript to run this app. 如何借助10的幂简化Java代码中重复的后缀校验与乘子逻辑?
优惠活动
大模型
产品
解决方案
定价
更多

如何借助10的幂简化Java代码中重复的后缀校验与乘子逻辑?

解决方案

核心是仅维护唯一的10的幂次常量,后缀校验规则和放大乘数都从该常量推导,后续调整规则只需修改一处常量即可,完全消除硬编码重复。

实现代码

首先定义预计算常量:

// 唯一可配置的10的幂次,6对应放大1000000倍、匹配6个0后缀
private static final int SCALE_EXPONENT = 6;
// 后缀匹配用的0字符串,Java 11+支持String.repeat
private static final String TARGET_SUFFIX = "0".repeat(SCALE_EXPONENT);
// 放大乘数
private static final long MULTIPLE = (long) Math.pow(10, SCALE_EXPONENT);

修改后的业务方法:

private Collection<String> xxx(Collection<String> values) {
    List<String> valuesMutable = new ArrayList<>(values);
    String origValue = valuesMutable.get(0);
    if (!origValue.endsWith(TARGET_SUFFIX)) {
        valuesMutable.set(0, String.valueOf(Long.parseLong(origValue) * MULTIPLE));
    }
    return valuesMutable;
}

Java 8及更早版本兼容

Java 11之前没有String.repeat方法,可以替换后缀生成逻辑:

private static final String TARGET_SUFFIX = new String(new char[SCALE_EXPONENT]).replace('\0', '0');

溢出场景优化

如果后续可能把幂次调整到18以上(超过long的最大取值范围),可以用BigInteger实现无溢出计算:

private static final BigInteger MULTIPLE = BigInteger.TEN.pow(SCALE_EXPONENT);

// 业务逻辑中替换计算逻辑
valuesMutable.set(0, BigInteger.valueOf(Long.parseLong(origValue))
        .multiply(MULTIPLE)
        .toString());

内容的提问来源于stack exchange,提问作者DerBenniAusA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 21:54:01