DECIMAL 值自行转换为 INT + 1

DECIMAL values being converted to INT + 1 on its own

我有一个 C# 应用程序,用户可以在其中填写表格以将产品存储在 SQL 服务器数据库中。

问题是每次存储产品(通过用户填写表格)时,价格(小数)自动转换为 int 并添加 1。

我一开始以为是应用程序的问题,然而,注册过程很简单,我没有发现任何错误,所以我直接从 SQL 服务器插入一行,问题出现了,所以这告诉我问题出在 SQL 服务器中, 不在应用程序中

正在执行

insert into product (code, description, unit_price, stock, category_code)
values (7, 'Window Cleaner', 20.50, 20, 3)

结果价格为 21。

这是table定义

CODE INT NOT NULL,
DESCRIPTION VARCHAR(30) NOT NULL,
UNIT_PRICE DECIMAL NOT NULL,
STOCK INT NOT NULL,
CATEGORY_CODE INT NOT NULL
CONSTRAINT PK_PRODUCT PRIMARY KEY(CODE),
CONSTRAINT FK_CATEGORY_CODE FOREIGN KEY (CATEGORY_CODE) REFERENCES Category(CODE),
CONSTRAINT PRODUCT_POSITIVE_VALUES CHECK(UNIT_PRICE > 0 AND CODE >= 0 AND STOCK >= 0)

您已使用以下内容定义您的列:

UNIT_PRICE DECIMAL NOT NULL

这没有精度也没有小数位数,因此将使用默认精度 (18) 和小数位数 (0)。默认比例 0 实际上是 int。因此,当您 insert/update 一个值时,该值将四舍五入为 int。要解决您的问题,请使用正确的精度和比例定义您的列,例如

UNIT_PRICE DECIMAL(9,2) NOT NULL

Reference