sql - DECIMAL 值自行转换为 INT + 1
问题描述
我有一个 C# 应用程序,用户填写表单以将产品存储在 SQL Server 数据库中。
问题是每次存储产品时(通过用户填写表格),价格(小数)会自动转换为int
并加 1。
我最初认为这是应用程序的问题,但是,注册过程非常简单,我没有发现任何错误,所以我直接从 SQL Server 插入一行,问题就出现了,所以这告诉我问题在 SQL Server 中,而不是在应用程序中。
执行
insert into product (code, description, unit_price, stock, category_code)
values (7, 'Window Cleaner', 20.50, 20, 3)
结果成价格为 21。
这是表定义
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
. 因此,当您插入/更新一个值时,该值将四舍五入为int
. 为了解决您的问题,请使用正确的精度和比例定义您的列,例如
UNIT_PRICE DECIMAL(9,2) NOT NULL
推荐阅读
- visual-studio-code - 如何在 Visual Studio for Mac 中“添加下一个事件”?
- sql - 无法将数据从 SQL 粘贴到 Excel
- python-3.x - 按其他列重采样和求和
- android-layout - Ionic 3 - 不同分辨率的图像尺寸:LDPI、MDPI、HDPI、XHDPI、XXHDPI、XXXHDPI
- android - setTitleTextColor 不会改变文本的颜色
- laravel - Ionic 和 Laravel 之间的“访问控制允许来源”
- python - Python中的曲线拟合受到具有正导数的约束
- sql - 如何建立父子关联,删除子项将删除父项,反之亦然
- c# - Android:如何记录应用程序的使用次数?
- ios - 防止恢复第一响应者