将浮点值插入SQL Server表

时间:2016-04-13 10:36:05

标签: c# sql sql-server console-application

我有一个浮动值,我尝试使用此代码插入到SQL Server表中:

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位数的值

2 个答案:

答案 0 :(得分:3)

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

根据您的要求,您有两种选择:

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

答案 1 :(得分:2)

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

Decimal / Numeric和Float之间的基本区别:

  

Float是近似数字数据类型,这意味着并非所有值   在数据类型范围内可以准确表示。十进制/数字是   Fixed-Precision数据类型,表示数据中的所有值   类型reane可以精确和规模地表示。

从Decimal或Numeric转换为float会导致一些精度损失。对于十进制或数字数据类型,SQL Server将每个特定的精度和比例组合视为不同的数据类型。 DECIMAL(2,2)和DECIMAL(2,4)是不同的数据类型。这意味着11.22和11.2222是不同的类型,但浮动不是这种情况。对于FLOAT(6),11.22和11.2222是相同的数据类型。