[英]Is there a way to truncate decimal when adding it to sql table
我正在尝试截断从 api 获取的小数并直接发送到 SQL 服务器中的表,如下所示:
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
scope 内部截断,但它没有按预期工作。
编辑我决定截断十进制值的主要原因是因为我总是偶然发现这个错误“参数异常参数值超出十进制范围”,所以我在两个 SQL 服务器中将十进制声明更改为 decimal(38, 30)并在实体框架中处理高精度小数。 它在一些 object 中工作,但最后我收到另一个错误“Coversion overflow”。
你用什么数据库和数据库框架来保存食谱?
如果您使用的是 SQL 服务器和实体框架(根据您的标签),则不必调用 decimal.Truncate 因为表定义高于 decimal 将在数据库中自动截断。 (在 memory 中你仍然有小数位,但在数据库中它们丢失了。)
因此,如果您重新加载 Recipe TotalWeight 将被截断。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.