给定这个Rust程序,它打印1.23456:

use std::fmt;
struct Foo(f64);
impl fmt::Display for Foo {
    fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
        write!(formatter, "{}", self.0)
    }
}
fn main() {
    println!("{:.2}", Foo(1.23456));
}

要打印1.23,对函数fmt的主体进行哪项最简单的更改? 通常,有没有一种简单的方式在函数fmt内使用由打印对象的代码设置的相同格式化选项?我知道Formatter对象有几个访问格式化选项的方法,但有没有一种简单的方法可以始终获得调用println!("{:.2}", Foo(1.23456).0);所获得的相同结果?

推荐答案

要将all个格式选项传递给.0,只需对其调用.fmt即可:

use std::fmt;
struct Foo(f64);
impl fmt::Display for Foo {
    fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
        self.0.fmt(formatter)
    }
}
fn main() {
    println!("{:.2}", Foo(1.23456));
}

(见playground)

Rust相关问答推荐

阻止websocket中断的中断中断的终端(操作系统错误4)

为什么reqwest以文本形式下载二进制文件?

"value is never read警告似乎不正确.我应该忽略它吗?

在Rust中有没有办法在没有UB的情况下在指针和U64之间进行转换?

我如何使用AWS SDK for Rust获取我承担的角色的凭据?

在复制类型中使用std::ptr::WRITE_VILAR进行内部可变性的安全性(即没有UnSafeCell)

Rust面向对象设计模式

Rust 中什么时候可以返回函数生成的字符串切片&str?

使用 pyo3 将 Rust 转换为 Python 自定义类型

将 &str 或 String 保存在变量中

当没有实际结果时,如何在 Rust 中强制执行错误处理?

如何保存指向持有引用数据的指针?

我可以在 Rust 中 serde struct camel_case 和 deserde PascalCase

是否可以通过可变引用推进可变切片?

不安全块不返回预期值

如何将参数传递给Rust 的线程?

我如何将 google_gmail1::Gmail> 传递给线程生成?

通用类型,不同于输入类型,作为函数的返回值

在使用大型表达式时(8k 行需要一小时编译),是否可以避免 Rust 中的二次编译时间?

将 reqwest bytes_stream 复制到 tokio 文件中