将浮点值插入 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 是相同的数据类型。
我有一个浮点值,我正尝试使用以下代码将其插入到 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 是相同的数据类型。