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
相关产品推荐
相关产品推荐

