4

我正在开发一个遗留的 ASP 应用程序。我试图将一个值 (40.33) 插入 SQL Server 2000 中恰好是浮点类型的字段中。我在应用程序中可以看到的每个地方(通过一些日志记录)都将 40.33 发送到存储过程。当我在调用时对数据库运行 SQL Profiler 时,我在跟踪中看到的值为 4.033000183105469e+001

所有额外的垃圾从哪里来(183105469)?

为什么当我通过 40 或 40.25 时没有任何额外内容?

这只是使用浮动的奇怪副作用之一吗?当我写东西时,我通常使用金钱或小数或其他东西,所以对浮点数据类型不太熟悉。

4

3 回答 3

8

是的,这是使用 FLOAT 的一个奇怪但众所周知的副作用。

在 Microsoft SQL Server 中,如果您需要带刻度的精确数字,则应使用精确的数字数据类型,例如NUMERIC、DECIMALMONEY 或 SMALLMONEY 。

不要使用浮点数。

于 2008-10-29T19:43:00.153 回答
0

我认为这可能只是一个精度问题——数字的 0.33 部分不能用二进制精确表示——这可能是你能得到的最接近的值。

于 2008-10-29T19:42:45.413 回答
0

问题是浮点数不是 100% 准确的。如果您需要准确的数字(特别是在处理货币价值时)......您应该使用 Decimal 类型。

于 2008-10-29T19:43:59.747 回答