截断Erlang中的浮点数

pu82cl6c  于 2022-12-08  发布在  Erlang
关注(0)|答案(5)|浏览(212)

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

float_to_list(0.02).

它会传回:

"2.00000000000000000000e-002"

我需要它给予我一个数字完全一样:
“零点二”
如果我喂它5.23
“五点二十三分”
如果我喂它5.5
“五块五”
所以基本上数字四舍五入到小数点后两位。可能很容易修复。
谢谢
编辑:
我想使用io格式它看起来可能会工作,
但在本例中没有:

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

看起来textctrl想要一个字符串,我不想把它打印到屏幕上。

uubf1zoe

uubf1zoe1#

你在找这样的东西:

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模块。

1rhkuytd

1rhkuytd2#

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

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

不完全是观察员所要求的,但仍然很有用。

qyzbxkaa

qyzbxkaa3#

或者,您可以使用已经在使用的函数。
float_to_list(0.02,[{decimals, 2}])输出'0.02'
或者对于Elixir用户;)
:erlang.float_to_list(5.231,[{:decimals, 2}])输出'5.2'

mm5n2pyu

mm5n2pyu4#

This link提供了截断/floor或ceil或舍入浮点数的函数。给定这些函数,您可以通过乘以100舍入为2位数,然后除以100(可能会再次舍入以避免精度错误)

guicsvcw

guicsvcw5#

我知道人们不喜欢“我不是X语言的Maven”的回答,但是printf命令是相当普遍的,所以我会说,在Erlang中寻找printf的模拟。
编辑:看起来格式和fwrite可能是那些类似的东西。有关erlang.org的更多信息。

相关问题