我尝试截断从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)以处理高精度小数。它在一些对象中工作,但最后我收到另一个错误"转换溢出"。
1条答案
按热度按时间cx6n0qe31#
您使用什么数据库和数据库框架来保存配方?
如果您使用SQL Server和实体框架(根据您的标记),则不必调用decimal.Truncate,因为使用上面的表定义时,小数将在数据库中自动被截断。(在内存中,您仍将保留小数位,但在数据库中,它们将丢失。)
因此,如果重新加载,配方总重将被截断。