【问题标题】:Inserting a value into an SQL float column generates a weird result将值插入 SQL 浮点列会产生奇怪的结果
【发布时间】:2008-10-29 19:36:45
【问题描述】:

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

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

为什么当我传入 40 或 40.25 时,什么都没有?

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

【问题讨论】:

    标签: sql sql-server floating-point


    【解决方案1】:

    是的,虽然 well-known 使用 FLOAT 的副作用很奇怪。

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

    不要使用 FLOAT。

    【讨论】:

    • 真的没那么奇怪……除非你的数学背景不够严谨。 ;-) 很好的答案
    • 有些事情可能很奇怪,但不是未知或意外的。 :-)
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-12-01
        • 2015-10-04
        • 2020-09-03
        • 1970-01-01
        • 2011-07-12
        • 1970-01-01
        • 2013-04-27
        相关资源
        最近更新 更多