You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Kotlin 中如何实现按规则截断保留一位小数的数学函数

实现保留1位小数截断效果的解决方案

核心需求说明

  • 输入25.69,输出25.6
  • 输入-0.40,输出-0.4
  • 输入-0.004,输出0或0.0

需求本质是直接截断小数点第二位及之后的内容,不做四舍五入。你之前测试的Math.ceil/Math.round/Math.floor都是整数取整方法,本身不支持保留小数位的操作,因此无法得到预期结果。

可用实现方案

方案1:算术截断法(最简实现)

核心逻辑是先将数值放大10倍,强制转换为int截断小数部分后再缩小10倍,适配所有需求场景:

public static double truncateToOneDecimal(double value) {
    // 放大10倍后截断小数部分,再缩小10倍恢复量级
    return (int)(value * 10) / 10.0;
}

测试结果:

  • 输入25.69 → (int)(256.9)=256 → 256/10.0=25.6
  • 输入-0.40 → (int)(-4.0)=-4 → -4/10.0=-0.4
  • 输入-0.004 → (int)(-0.04)=0 → 0/10.0=0.0

方案2:DecimalFormat格式化(适合输出字符串场景)

如果需要直接得到格式化后的字符串,可以通过设置截断模式实现:

import java.text.DecimalFormat;
import java.math.RoundingMode;

public static String formatToOneDecimal(double value) {
    DecimalFormat decimalFormat = new DecimalFormat("#.#");
    // 设置为DOWN模式,直接截断多余小数,不做四舍五入
    decimalFormat.setRoundingMode(RoundingMode.DOWN);
    return decimalFormat.format(value);
}

方案3:BigDecimal实现(高精度场景适用)

如果对浮点数精度要求极高,避免算术运算的精度误差,推荐使用BigDecimal实现:

import java.math.BigDecimal;
import java.math.RoundingMode;

public static double truncateToOneDecimal(double value) {
    return BigDecimal.valueOf(value)
            // 保留1位小数,采用截断模式
            .setScale(1, RoundingMode.DOWN)
            .doubleValue();
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 01:06:04