PHP / MySQL的:最好的货币操作/存储做法?(PHP/MySQL: Best money o

2019-06-25 00:09发布

所以,我打算让这涉及了很多钱的应用程序(PHP / MySQL的),和我在想如何存储和使用金钱运作,指的是PHP浮点数据类型和MySQL小数。

我在想两个选项。 其中之一是操作和($美元* 100)存储的钱整数美分格式,以便不应对浮动inprecisions并将其存储在数据库中的整数了。 另一种是在数据库存储为十进制和使用BC数学在PHP中进行计算。

所以,我用Google搜索了一夜,以找出哪些是使用最好的选择,并没有找到一个明确的答案。 我见过的唯一合理的选择是整数美分一个(我真的不喜欢,因为这将意味着很多在浏览器中每个显示之前,从美元转换为美分,反之亦然,并在数据库中存储之前)。

另外,人们(MySQL的存储小数位的字符串,操作它们作为花车等)抱怨MySQL的小数,但都是旧的帖子。 据MySQL文档,目前的版本正确处理小数,唯一的抱怨是,它截断超过申报部分长度值的分数(例如,如果你存储在一个声明的12.326值十进制(9,2)) ,但是从我的调查,便将它,而不是仅仅截断(12.326变为12.33),这在我看来是正确的。

而且,我也没有找到钱存放为小数的任何建议,并使用PHP bcmath时进行计算,而在我看来,这是因为少数人知道BC和GMP数学函数。

那么,什么是使用最好的选择,考虑到精度,速度(bcmath时计算速度,MySQL的十进制速度VS整数)和编程安慰?

Answer 1:

我肯定会去使用int和路由都通过一个数据对象(ORM)的风格,然后处理所有转换为您服务。 使用数据对象的客户端代码将永远不需要做转换,也不会在意,而作为整数由DB容易处理,你不会有问题的存储。 此外,还可以再加入都需要钱的物品(如钱类型之间的转换等)很容易的任何其他方法。



Answer 2:

我也很难找到关于bcmath时的信息,所以我研究它,并写了关于它自己的文章: http://www.exploringbinary.com/base-conversion-in-php-using-bcmath/ 。

(我不采取立场,你应该使用bcmath时 - 我只是给你的信息)



文章来源: PHP/MySQL: Best money operations/storing practices?