将浮点值插入 SQL 服务器 table

Insert float value into SQL Server table

我有一个浮点值,我正尝试使用以下代码将其插入到 SQL 服务器 table 中:

SqlConnection connection = new SqlConnection(ConnectionString);
SqlCommand command = new SqlCommand("AddNewValue", connection);

command.CommandType = CommandType.StoredProcedure;
command.Parameters.Add("value", SqlDbType.Float).Value = value;

try
{
    connection.Open();
    command.ExecuteNonQuery();
}
finally
{
    if (connection.State == ConnectionState.Open) 
    { 
        connection.Close(); 
    }
}

这是存储过程:

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE [dbo].[AddNewValue]
     (@value float)
AS
    INSERT INTO MYTable (value, date) 
    VALUES (@value, GETDATE())
GO

问题是我有这个浮点数值,例如 3.7723,而在数据库中,它是 3.77230000495911

知道问题出在哪里吗?我想在点

之后插入只有4位数字的值

这是浮点数的标准行为,因为它们存储值的方式。

这里有两个选项,具体取决于您的要求:

  • 使用具有所需精度的小数而不是浮点数(在数据库和客户端中)。
  • 将值存储为浮点数,但在显示时将其截断为所需的精度。

您需要使用 Decimal (18,4) 数据类型

Decimal/Numeric 和 Float 的基本区别:

Float is Approximate-number data type, which means that not all values in the data type range can be represented exactly. Decimal/Numeric is Fixed-Precision data type, which means that all the values in the data type reane can be represented exactly with precision and scale.

从十进制或数字转换为浮点数可能会导致一些精度损失。对于小数或数字数据类型,SQL 服务器将每个特定的精度和小数位组合视为不同的数据类型。 DECIMAL(2,2) 和 DECIMAL(2,4) 是不同的数据类型。这意味着 11.22 和 11.2222 是不同的类型,尽管浮点数不是这种情况。对于 FLOAT(6) 11.22 和 11.2222 是相同的数据类型。