如何在 SQL Server 2000/2005/2008 中使用 FLOAT 转换小数位数

Posted

技术标签:

【中文标题】如何在 SQL Server 2000/2005/2008 中使用 FLOAT 转换小数位数【英文标题】:How Decimal places are converted using FLOAT in SQL Server 2000/2005/2008 【发布时间】:2009-12-02 09:48:28 【问题描述】:

在这个SO question 中,OP 想要将 0 放在小数位上以获得他的结果。现在我给出的(下面)示例是用 DECIMAL 进行 CAST,然后用 FLOAT 进行 CAST。

例如

SELECT CAST(0.55 AS FLOAT)

使用上面的示例并在 SQL Server 2005/2008 中运行它似乎会得到正确的结果 0.55。但正如 Peter 在另一篇文章中指出的那样,在 SQL Server 2000 中运行它会产生 0.55000000000000004。

所以我的问题是:

在 SQL 中进行数据转换时是否要不惜一切代价避免使用 FLOAT?

为什么cast(0.55 as float) 在SQL2k 中产生0.55000000000000004 而在以后的版本中产生0.55

Microsoft 是否使在更高版本的 SQL Server 中使用 FLOAT 更加可靠?

感谢您的宝贵时间。

【问题讨论】:

抱歉 kevchadders,但您有什么问题? 对不起鲁本斯的困惑,我希望我已经说得更清楚了。 为了清楚起见,示例应该只是:select cast(0.55 as float),因为小数部分只与其他问题有关 好点,我也编辑了我的示例。 【参考方案1】:

我个人的黄金法则是:避免浮动。我不记得自己最近几年用过浮点数了。

我最近处理的所有业务场景都必须存储货币值,甚至是具有固定精度的数字,所以我更喜欢使用DECIMALMONEY

【讨论】:

作为您唯一发布答案的人 Rubens,您将获得接受的答案。 您也可以改写它并添加赏金;

以上是关于如何在 SQL Server 2000/2005/2008 中使用 FLOAT 转换小数位数的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SQL 2000/2005 中执行区分大小写的搜索和替换?

如何在 SQL 2000/2005 上设置与 Oracle 数据库的链接服务器?

MYSQL是微软的产品吗?SOL SERVER2000\2005是哪个公司开发的?

怎么在sql servler2000中建立一个序列,用sequence写的

sql server有LINUX的版本吗

在SQL SERVER 2008中执行数据时有错误提示,急求大家帮忙!