我有一个浮动值,我尝试使用此代码插入到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位数的值答案 0 :(得分:3)
这是浮点数的标准行为,因为它们存储值的方式。
根据您的要求,您有两种选择:
答案 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是相同的数据类型。