如何在 Rust 中格式化浮点数而无需保留末尾的零?

5

我将f64格式化为以下方式:

format!("{:.8}", x)

这将返回像这样的字符串:
110.00000000
601.47000000
4.50000000

我想要删除每个数字末尾的所有额外的零,以便输出结果是这样的:
110
601.47
4.5

我希望您不需要使用任何外部的包或库(如果必须也没关系)。Rust内置了可以实现此功能的东西吗?还是我必须编写自定义函数来实现?
编辑:
我应该补充说明,我不能简单地使用format("{}", x),因为它会返回像这样的字符串:
40.019999999999996
1192.6499999999999
2733.9599999999996

有什么解决办法吗?

2个回答

2

目前,这对我来说解决了这个问题

let y = (x * 100_000_000.0).round() / 100_000_000.0;
format!("{}", y);

我会密切关注是否有更好的解决方案。谢谢!


-2

你只需做

format!("{}", x)

{:.8} 需要 8 位精度,因此会打印出多余的零。


2
不太是我想要的,因为这会返回像这样的字符串:56.74000000000001、8.940000000000001、89.63000000000001、103.42999999999998。 - Harrison
这似乎是浮点数精度的自然缺陷,你只需要选择在接近你的目的地时进行舍入。 - kopecs
2
你的警告并没有回答提问者的问题,只是为为什么事情会变成这样进行了合理化解释。 - flow

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接