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

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

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

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

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

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

有帮助吗?

解决方案

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

其他提示

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top