问题描述
我有一个价格字段/列(例如15.50 USD),我不知道Rails数据类型应该是字符串,十进制还是浮动?
I've got a price field/column (eg. 15.50 USD) and I wonder should the Rails datatype be string, decimal, or float?
推荐答案
这个参数总是有两边 - 小数和整数。整数的支持者认为小数可能不准确(当执行转换时),并且BigDecimal实现包括错误,有时甚至是segfault。
This argument always has two sides - decimals and integers. Supporters of integers argue that decimals might not be accurate (when doing conversions) and that the BigDecimal implementation includes bugs, sometimes even segfaulting.
对于我自己的项目,我拾起整数也将它们包装在自定义容器中,将分数转换为真实金额并返回。起初它似乎很好,一段时间后,它变得非常麻烦使用 - 跟踪当你处理美分,当格式化字符串等。
For my own project, i picked up integers also, wrapped them in a custom container, converting cents to "real" amounts and back. At first it seemed nice, after a while it became really cumbersome to use - tracking when you are dealing with cents, when with formatted strings etc.
然后我还原为小数 - 相同的格式,所有的时间,我可以很容易地将金额转换为分,如果需要,我得到不同的舍入算法开箱。
Then i reverted to decimals - same format all the time, i can easily convert the amount to cents if needed, i get the different rounding algorithms out of the box. Im much much more satisfied with decimals.
并且为了解决小数不准确的问题 - 当Google搜索时,您可能会注意到大多数错误与将小数转换为浮动:)
由于vise已经提到过,浮动不准确,你永远不应该将你的十进制转换为浮点数。这是处理小数时你必须记住的唯一最重要的事情 - 你不想失去转换的准确性。
当我使用BigDecimal时,我从来没有遇到ruby 1.8.7,1.8.7和1.9.1的任何错误。
And to address the issues about decimals not being accurate - when googling you might notice that most of the bugs are related to converting decimals into floats :)As vise already mentioned before, floats are not accurate and you should never ever convert your decimal to a float. That's the single most important thing you have to remember when dealing with decimals - you don't want to lose accuracy by conversions.Oh and i have never actually encountered any bugs with ruby 1.8.7, 1.8.7 and 1.9.1 while using BigDecimal extensively.
这篇关于价格字段的字符串,十进制或浮点数据类型?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!