为什么 f32 不实现 std::fmt::Binary?

jea*_*553 5 rust

我尝试以f32二进制格式显示 a :

let value: f32 = 0.45;                                                      
let my_string = format!("{:b}", value);
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:“f32: std::fmt::Binary不满足特征界限”。

我认为当我们想要将 af32转换为 a的二进制表示时,我们必须自己实现 trait String。事实上,对于一些f32不能用二进制表示的值,Rust 不知道该怎么做。例如,如何处理0.1?特征应该返回字符串0.00011还是0.0001100110011?这就是没有std::fmt::Binaryfor定义的原因f32吗?

bug*_*bug 1

文档提供std::fmt::Binary了提示:

备用标志 # 在输出前面添加 0b。

基本上,对于 Rust 中的每个数字文字表达式,都有一个可以打印它的格式化程序。如果f32要实现std::fmt::Binary,这可以被视为对二进制浮点文字应该是什么样子做出固执己见的陈述,即使语言本身不支持它们并且很可能永远不会支持它们。

在 1.0 之前的早期,实际上有一个针对十六进制浮点文字的实验性语法扩展,该扩展在 1.0 稳定之前被删除。有时仍然会有一些关于这个问题的讨论,但没有计划将其添加到该语言中,更不用说它的二进制表兄弟了。