将浮点数存储为INT?

时间:2010-09-30 14:33:18

标签: mysql

在mySQL中存储浮点数的最佳数据类型是什么?

我可以以某种方式将其存储为INT吗?

我在想VARCHAR是我最好的选择,但是如果你们知道更好的话我会很感激你的意见。

提前Thanx!

4 个答案:

答案 0 :(得分:6)

取决于您存储的浮点数类型,有关MySQL数字类型的所有详细信息,请访问:

http://dev.mysql.com/doc/refman/5.5/en/numeric-types.html

DECIMAL:对于货币,你应该使用十进制,因为它的精确,你不会在算术中得到奇怪的十进制舍入。

INT:是的,您可以将浮点数存储为整数以获得性能。例如,货币可以存储为19.56美元或1956年,只要您在显示时始终/ 100,会计软件经常这样做。此外,只要在数据库外部除以10,000,000,就可以将纬度/经度存储为整数,322274063,-1109654800 = 32.2274063,-110.9654800。

FLOAT / DOUBLE:然后当然有长和双。当性能不是优先级或小数位数变化时使用它们。

SO RULE:如果性能有问题并且您知道小数位总是固定的长度,您可以轻松存储INT以存储FLOAT。

答案 1 :(得分:5)

我会使用Mysql Float类型。

答案 2 :(得分:2)

为什么要将浮点存储为int? MySQL有十进制和浮点类型,就像你的编程语言一样。

我认为你有充分的理由。要将float存储为int,您可以尝试以下几点:

  • 将数字乘以10 ^ n,其中n是您要保留的有效位数,然后截断小数部分的其余部分。当你从DB中取回它时,转换为float / decimal并除以n。这需要一个足够大的int来存储乘法值;在32位体系结构中,“native”int可以存储最多20亿的值。
  • 将数字拆分为整数部分及其小数部分。这需要两个字段,但每个字段的值可以达到最大整数值,这使您可以轻松获得百万分之一的精度。

答案 3 :(得分:0)

如果您必须以平面格式编码浮点数,我建议您查看http://en.wikipedia.org/wiki/IEEE_754-2008