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

Rust中如何在不设置精度时打印浮点数保留末尾.0

在Rust中让整数型浮点数输出带.0,同时保留非整数浮点数的默认格式

在Rust中使用默认{}格式化浮点数时,整数型浮点数(如1.0)会被输出为1,而非整数浮点数(如1.1999999)则保留完整小数部分。需求是让整数型浮点数输出1.0这类带.0的格式,同时不改变非整数浮点数的默认格式化行为,且无需设置固定精度。

实现方案

通过自定义格式化逻辑实现,核心是判断浮点数是否为整数(或接近整数,处理浮点数精度误差),再选择对应格式化方式:

fn format_float(f: f64) -> String {
    // 定义精度阈值,处理浮点数存储的微小误差
    const EPSILON: f64 = 1e-10;
    if f.fract().abs() < EPSILON {
        // 整数型浮点数,格式化为带.0的形式
        format!("{}.0", f.trunc())
    } else {
        // 非整数浮点数,使用默认格式化规则
        format!("{}", f)
    }
}

fn main() {
    println!("{}", format_float(1.0));
    println!("{}", format_float(1.1999999));
    println!("{}", format_float(2.999999));
    println!("{}", format_float(3.0000000000001));
}

输出结果

1.0
1.1999999
2.999999
3.0000000000001

说明

  • 使用fract()获取浮点数的小数部分,通过与极小阈值EPSILON比较,避免因浮点数精度存储误差导致的误判(比如1.0000000000000002这类本应是整数但存储有微小偏差的数值)。
  • 对整数型浮点数,用trunc()提取整数部分后拼接.0;非整数浮点数直接使用默认{}格式化,保留其最短的准确表示形式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 06:21:28