SQL Server 在sql表中添加decimal时,有没有办法截断decimal

wfveoks0  于 2023-01-25  发布在  其他
关注(0)|答案(1)|浏览(119)

我尝试截断从api中获取的小数并直接发送到SQL Server中的表,如下所示:

CREATE TABLE [dbo].[Recipes] 
(
    [Id]          INT PRIMARY KEY NOT NULL,
    [Uri]         NVARCHAR(MAX) NULL,
    [Label]       NVARCHAR(MAX) NULL,
    [Image]       NVARCHAR(MAX) NULL,
    [Source]      NVARCHAR(MAX) NULL,
    [Url]         NVARCHAR(MAX) NULL,
    [ShareAs]     NVARCHAR(MAX) NULL,
    [Yield]       DECIMAL(38)   NULL,
    [Calories]    DECIMAL(38)   NULL,
    [TotalWeight] DECIMAL(38)   NULL,
    [TotalTime]   DECIMAL(38)   NULL,
);
myContext.Recipes.Add(new()
                    {
                        Id = IdForRecipesManually,
                        Calories = hit.recipe.calories,
                        ShareAs = hit.recipe.shareAs,
                        Uri = hit.recipe.uri,
                        Url = hit.recipe.url,
                        Image = hit.recipe.image,
                        Label = hit.recipe.label,
                        Yield = hit.recipe.yield,
                        Source = hit.recipe.source,
                        TotalTime = hit.recipe.totalTime,
                        TotalWeight = Decimal.Truncate(hit.recipe.totalWeight)
                    });

但是,我尝试直接截断,因为在myContext中向Recipes表添加值似乎不起作用,因为在我运行代码后,值没有被截断。
但是当尝试截断myContext.Recipes之外的变量时,它工作得很好,如下所示:

var temp = Decimal.Truncate(hit.recipe.totalWeight);

有没有可能在myContext.Recipes里面做这个?
尝试在myContext.Recipes范围内截断,但未按预期工作。

    • EDIT**我决定截断小数值的主要原因是因为我总是偶然发现这个错误"参数异常参数值超出小数范围",所以我随后在SQL Server和实体框架中将小数声明更改为decimal(38,30)以处理高精度小数。它在一些对象中工作,但最后我收到另一个错误"转换溢出"。
cx6n0qe3

cx6n0qe31#

您使用什么数据库和数据库框架来保存配方?
如果您使用SQL Server和实体框架(根据您的标记),则不必调用decimal.Truncate,因为使用上面的表定义时,小数将在数据库中自动被截断。(在内存中,您仍将保留小数位,但在数据库中,它们将丢失。)
因此,如果重新加载,配方总重将被截断。

相关问题