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
相关产品推荐
相关产品推荐

