You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Erlang/Elixir中如何无科学计数法、不指定小数位转浮点数为字符串?

Erlang/Elixir 浮点数转无科学计数法、无尾随零的字符串方法

Erlang 实现

可以通过自定义函数实现需求:先将浮点数转为带足够小数位的二进制字符串,再移除末尾的零和多余的小数点。示例代码如下:

float_to_clean_str(Float) ->
    Bin = float_to_binary(Float, [{decimals, 15}]),
    case binary:split(Bin, <<".">>) of
        [IntPart] -> IntPart;
        [IntPart, FracPart] ->
            TrimmedFrac = binary:rstrip(FracPart, binary, $0),
            case TrimmedFrac of
                <<>> -> IntPart;
                _ -> <<IntPart/binary, $., TrimmedFrac/binary>>
            end
    end.

测试效果:

  • float_to_clean_str(100000000000.0) → "100000000000"
  • float_to_clean_str(3.14159) → "3.14159"
  • float_to_clean_str(2.5000) → "2.5"

Elixir 实现

利用Elixir的字符串处理函数,同样先转成带足够小数位的字符串,再修剪尾随零和小数点:

def float_to_clean_str(float) do
  float
  |> Float.to_string(decimals: 15)
  |> String.trim_trailing("0")
  |> String.trim_trailing(".")
end

测试效果:

  • float_to_clean_str(100000000000.0) → "100000000000"
  • float_to_clean_str(3.14159) → "3.14159"
  • float_to_clean_str(2.5000) → "2.5"

说明

选择15位小数是因为双精度浮点数的有效数字约为15-17位,足够覆盖绝大多数常规场景的精度需求,避免因精度不足导致的数值失真。通过修剪操作,既能避免科学计数法,又能去掉不必要的尾随零。

内容的提问来源于stack exchange,提问作者Drathier

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 10:42:12