【问题标题】:Truncate a float in Erlang在 Erlang 中截断浮点数
【发布时间】:2011-04-29 16:53:53
【问题描述】:

我正在使用一个函数从浮点数创建一个列表。

 float_to_list(0.02).

返回:

"2.00000000000000000000e-002"

我需要它给我一个完全一样的数字:

“0.20”

如果我喂它 5.23

“5.23”

如果我喂它 5.5

“5.50”

所以基本上这个数字四舍五入到小数点后两位。 可能很容易解决。

谢谢

编辑:

我想使用看起来可行的 io 格式,

但在这个例子中没有:

wxTextCtrl:setValue( TcGrossProfit, io:format("~p", [NUMBER]), ),

似乎 textctrl 想要一个字符串,我不想将它打印到屏幕上。

【问题讨论】:

    标签: list erlang floating-point


    【解决方案1】:

    我知道人们不喜欢“我不是 X 语言专家”的回答,但是 printf 命令非常普遍,所以我会说,在 Erlang 中寻找 printf 的类似物。

    编辑:看起来格式和 fwrite 可能是那些类似物。更多信息来自erlang.org

    【讨论】:

      【解决方案2】:

      This link 提供截断/下限或上限或舍入浮点数的功能。给定那些你可以通过乘以 100、四舍五入然后除以 100 来四舍五入到 2 位(并且可能再次四舍五入以避免精度错误)

      【讨论】:

        【解决方案3】:

        您是否正在寻找这样的东西:

        6> F = 5/2.
        2.50000
        7> io_lib:format("~.1f",[F]).
        ["2.5"]
        8> io_lib:format("~.2f",[F]).
        ["2.50"]
        9> io_lib:format("~.3f",[F]).
        ["2.500"]
        

        如果是,请查看io_lib 模块。

        【讨论】:

        • +1 是唯一提到 io_lib 的答案 - 格式化为字符串(又名列表)的东西,而不是像 io 这样打印输出。
        • @pst 不过,到目前为止,唯一提到io_lib的答案。
        【解决方案4】:

        mochinum:digits 将浮点数转换为具有适当精度级别的字符串。

        1> mochinum:digits(1.1).
        "1.1"
        2> mochinum:digits(1.2345).
        "1.2345"
        

        不完全符合 OP 的要求,但仍然很有用。

        【讨论】:

          【解决方案5】:

          您也可以使用您已经在使用的功能。

          float_to_list(0.02,[{decimals, 2}]) 输出“0.02”

          或者对于 Elixir 用户 ;)

          :erlang.float_to_list(5.231,[{:decimals, 2}]) 输出“5.2”

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2013-12-31
            • 2011-06-07
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-04-08
            相关资源
            最近更新 更多