【问题标题】:DECIMAL values being converted to INT + 1 on its ownDECIMAL 值自行转换为 INT + 1
【发布时间】:2020-08-25 06:48:55
【问题描述】:

我有一个 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)

【问题讨论】:

  • 您是否尝试过像 20.30 这样的小数部分较低的值?要检查它是否是四舍五入,而不是简单地添加 1

标签: sql sql-server int decimal sql-insert


【解决方案1】:

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

UNIT_PRICE DECIMAL NOT NULL

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

UNIT_PRICE DECIMAL(9,2) NOT NULL

Reference

【讨论】:

    猜你喜欢
    • 2021-08-31
    • 2020-10-14
    • 1970-01-01
    • 1970-01-01
    • 2017-06-22
    • 2011-05-01
    • 1970-01-01
    • 2012-01-11
    • 2014-09-13
    相关资源
    最近更新 更多