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/Erlang中,处理金钱的推荐数据类型是什么(只有2位小数)?_Erlang_Elixir - Fatal编程技术网

在Elixir/Erlang中,处理金钱的推荐数据类型是什么(只有2位小数)?

在Elixir/Erlang中,处理金钱的推荐数据类型是什么(只有2位小数)?,erlang,elixir,Erlang,Elixir,处理货币的推荐数据类型是什么?Elixir/Erlang中只有2位小数的数值?我认为处理货币时应该始终使用整数。浮点运算可能会有舍入错误,即使是1美分的货币处理代码也不正常。例如,代替 amount = 99.99 使用 如果要将金额存储在数据库中,这一点尤为重要,因为Elixir与数据库之间的转换可能会产生不良结果。我强烈建议使用十进制库。在处理所有棘手的边缘案件时,已经进行了大量的思考和工作 金钱,就像密码学一样,不是你应该自己实现的东西。你会弄错的 使用十进制库是货币处理逻辑的一种方式,

处理货币的推荐数据类型是什么?Elixir/Erlang中只有2位小数的数值?

我认为处理货币时应该始终使用整数。浮点运算可能会有舍入错误,即使是1美分的货币处理代码也不正常。例如,代替

amount = 99.99
使用


如果要将金额存储在数据库中,这一点尤为重要,因为Elixir与数据库之间的转换可能会产生不良结果。

我强烈建议使用十进制库。在处理所有棘手的边缘案件时,已经进行了大量的思考和工作


金钱,就像密码学一样,不是你应该自己实现的东西。你会弄错的

使用十进制库是货币处理逻辑的一种方式,
尤其是当您必须对数量执行算术运算时。

?我尝试过十进制,但在混合数字数据上使用Enum.reduce时遇到了问题您可以始终确保您使用的数据是十进制结构。@CharlesOkwuagwu Justin的意思可能是
r.data |>Enum.map(&decimal.new/1)|>Enum.reduce(Decimal.new(0),&sum(&1,&2))
。即使
r.data
包含本机数字类型和
Decimal
s的混合,这也会起作用。因此,请将1转换为十进制,并使用Decimal.add和类似的函数。您是对的,但您可以想象我在处理……和处理金钱时需要添加的额外层(2位十进制数据)在任何语言中都是非常常见的。金钱是一个非常复杂的话题,很多应用程序都不需要它(我已经两年多没有写过一行与金钱有关的代码了),因此不应该真正属于一种语言的核心库。例如,我曾在一个系统上工作过,我们实际上需要比美分更小的准确度——将所有这些要求放在一个标准库中可能会使其无法使用(我们使用整数来实现这一点——这通常是最简单的解决方案,除非货币等发挥重要作用,否则我通常建议这样做,尤其是内置了bignum库)是的。将它包装在一个模块中,它很好、简单、快速。而且,当你使用浮点数时,你不会遇到所有的舍入废话。当然,YMMV-对与金钱相关的计算、性能问题等的需求有多大,等等。但我通常会从这里开始,除非我在编写会计相关软件(那么我想要一个合适的图书馆,这里其他人指出的图书馆之一)@CharlesOkwuagwu我认为你从未在金融行业工作过。适当的舍入和缩放可以等于数百万美元。十进制库很酷。但请认真想想,如果所讨论的货币确实只精确到/可用到最接近的美分……以美分表示的整数mth的好处开始变得非常有意义。
amount_cents = 9999