Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Elixir EXTO以科学(指数)表示法返回数字_Elixir_Ecto - Fatal编程技术网

Elixir EXTO以科学(指数)表示法返回数字

Elixir EXTO以科学(指数)表示法返回数字,elixir,ecto,Elixir,Ecto,我不知道这是外星人的问题还是长生不老药的问题。当我在数据库中有一个数字,如1000、15000等时,Ecto会将其返回为1.0e3、1.5e4。。。如果我把1000改成1234,一切都好 Elixir 1.3.2、Exto 2.0.3、MySQL 迁移: alter table(:incoming_transfers) do add :fee, :float # Ecto translates it as DOUBLE in MySQL end 模式: schema "incoming_t

我不知道这是外星人的问题还是长生不老药的问题。当我在数据库中有一个数字,如1000、15000等时,Ecto会将其返回为1.0e3、1.5e4。。。如果我把1000改成1234,一切都好

Elixir 1.3.2、Exto 2.0.3、MySQL

迁移:

alter table(:incoming_transfers) do
  add :fee, :float # Ecto translates it as DOUBLE in MySQL
end
模式:

schema "incoming_transfers" do
  field :fee, :float
end

如果我在数据库类型DOUBLE中手动更改为FLOAT,问题仍然存在。但是如果我把它改成整数,那就好了。

Elixir的
检查
浮点的实现,并提到它试图以尽可能少的字符数准确地打印数字。因此,
1000
转换为
1.0e3
,因为它比
1000.0
短,但是
100.0
不会转换为
1.0e2
,因为它不比
100.0
短。类似地,
12300.0
被转换为
1.23e4
,因为它更短

%%  Writes the shortest, correctly rounded string that converts
%%  to Float when read back with list_to_float/1.
%%
%%  See also "Printing Floating-Point Numbers Quickly and Accurately"
%%  in Proceedings of the SIGPLAN '96 Conference on Programming
%%  Language Design and Implementation.
二郎:

1> [1000.0, 100.0, 12300.0].
[1.0e3,100.0,1.23e4]

请注意,这不会导致丢失任何精度(超出浮点数已经丢失的精度)<对于那些想要覆盖@Dogbert提到的函数的人来说,code>1000.0
1.0e3

完全相等。只需将其放入您的代码中:

defimpl Inspect, for: Float do
  def inspect(term, _opts) do
    IO.iodata_to_binary(:io_lib_format.fwrite_g(term))
  end
end
并将
:io_lib_format.fwrite_g(term)
更改为类似
:erlang的内容。浮点到二进制(术语[小数:6])
。 例如,对于
7.12
,它返回
“7.120000”


无论如何,我认为最好使用Float而不是Float。

在表的迁移和模型中的模式声明中,该列使用了什么类型?你能在问题中包含这两个文件的相关片段吗?@Dogbert我已经更新了我的问题所以-也许这是一个愚蠢的问题-你为什么要保留整数作为浮点数?只需在模式中使用整数。@PatNowak这只是一个示例。当我第一次遇到这个问题时,我通过将Float转换为解决了这个问题,但是现在我必须使用Float。