2011-09-19 61 views
1

我有用于存储浮点数据列截断尾随零,即MySQL的 - 避免float数据类型

1.1 
11.60 
4.23 

不幸的是,11.60被存储为11.6。我需要它有额外的零。我必须将我的数据类型更改为varchar吗?处理这个问题的最好方法是什么?

+6

推荐该前导/尾随零是用于客户端显示,而不是用于数据库来存储。 –

+1

假设你需要在右边有两个小数位,所有数字都可以存储为'DECIMAL(something,2)',但你的例子不支持这个理论。如果你确实需要这个数字来保存,那么'VARCHAR'可能是最好的选择。 –

+0

@p。坎贝尔 - 理解,但它是一个编码产品系统,所以11.6与11.60不同。 – Ben

回答

2

听起来您是在存储产品代码的意见,所以float建议不适合数据类型。事实上,这不是一个渲染问题,但是我们误解了它从你最初的浮点选择(认为你确实存储了像金钱或真正的小数点)。

如您所怀疑的那样,使用varchar进行搜索,因为它确实是一个字符串值。

这里是你如何能做到这一点:

  • 创建类型为varchar(100)的新列或任何长度为您
  • 从浮动列中的值复制到新塔适合
ALTER TABLE MyTable ADD MyNewColumn VARCHAR(100); 

UPDATE MyTable 
SET MyNewColumn = FORMAT(MyFloatColumn, 2); 
+0

@p。坎贝尔 - 见波希米亚人的评论(基本上相同的解决方案)。但是,因为我最终使用了varchar解决方案,所以我会给你接受。感谢所有提示。 – Ben

+0

@Steve:对,将浮点数格式化为2位小数可能不是最好的解决方案,因为它不会真正知道是否需要填充2,5或10个尾随数字。转换数据将是另一个你需要关闭的技巧。 –

1

这是一个呈现问题,而不是数据问题。为了“解决”它,运用MySQL的函数FORMAT你的价值,你选择它:

select FORMAT(my_float_column, 2) 
from my_table; 

2是小数位的数量。它将处理(几乎)任意小数点左边的数字。

+0

波希米亚人和其他人 - 这看起来像会打破数字超过2位数字...思想? – Ben