我尝试以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::Binary
for定义的原因f32
吗?
的文档提供std::fmt::Binary
了提示:
备用标志 # 在输出前面添加 0b。
基本上,对于 Rust 中的每个数字文字表达式,都有一个可以打印它的格式化程序。如果f32
要实现std::fmt::Binary
,这可以被视为对二进制浮点文字应该是什么样子做出固执己见的陈述,即使语言本身不支持它们并且很可能永远不会支持它们。
在 1.0 之前的早期,实际上有一个针对十六进制浮点文字的实验性语法扩展,该扩展在 1.0 稳定之前被删除。有时仍然会有一些关于这个问题的讨论,但没有计划将其添加到该语言中,更不用说它的二进制表兄弟了。