【问题标题】:How to format a float without trailing zeros in Rust?如何在Rust中格式化一个没有尾随零的浮点数?
【发布时间】:2020-04-17 18:11:03
【问题描述】:

我正在像这样格式化f64

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

这会返回如下字符串:

110.00000000
601.47000000
4.50000000

我希望删除每个末尾的所有额外零,以便输出如下:

110
601.47
4.5

我希望在没有任何外部 crate 或库的情况下执行此操作(但如果必须发生,也没什么大不了的)。 Rust 是否有内置的东西可以做到这一点?还是我必须编写一个自定义函数才能这样做?

编辑:

我应该补充一点,我不能简单地做format("{}", x),因为它会返回这样的字符串:

40.019999999999996
1192.6499999999999
2733.9599999999996

有办法解决吗?

【问题讨论】:

    标签: rust


    【解决方案1】:

    这目前为我解决了the issue

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

    我会留意任何更好的解决方案。谢谢!

    【讨论】:

      【解决方案2】:

      你可以这样做

      format!("{}", x)
      

      {:.8} 需要 8 位精度,因此会打印出额外的零来达到该精度。

      【讨论】:

      • 不是我想要的,因为它返回的字符串如下:56.74000000000001 8.940000000000001 89.63000000000001 103.42999999999998
      • 这看起来像是浮点不精确的自然事实,您只需要选择何时足够接近以达到您的目的。
      • 您的警告并没有回答 OP 的问题,它只是解释了为什么它是这样的
      猜你喜欢
      • 2011-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-18
      • 2013-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多