【问题标题】:.NET Core model is rounding my decimal values [closed].NET Core 模型正在四舍五入我的十进制值 [关闭]
【发布时间】:2019-12-10 06:06:54
【问题描述】:

我有一个 .NET Core 2.0 应用程序,它从 API 中提取数据并尝试将其保存到表 cog_detail(使用模型 CogDetail)

foreach (Models.Cog.CogDetail cd in cdList)
{
   _context.CogDetail.Add(cd);
   _context.SaveChanges();
}

其中一个值称为 Lmn,当我检查 cd 中的值时显示为 2.60895M(我在 _context.CogDetail.Add(cd); 上有一个断点)

但是一旦保存,它就会在数据库中保存为 3

SQL Server 表的列为 decimal(18, 0), null

我的上下文是这样的:

modelBuilder.Entity<Models.Cog.CogDetail>(entity =>
{
  entity.HasKey(e => new { e.Test_ID, e.TCode }).HasName("PK_cog_detail");

  entity.ToTable("cog_detail", "cog");

  entity.Property(e => e.Test_ID)
    .HasColumnName("test_id")
    .HasColumnType("int");

  entity.Property(e => e.TCode)
    .HasColumnName("tcode")
    .HasColumnType("varchar(10)");

  entity.Property(e => e.Lmn)
    .HasColumnName("lmn")
    .HasColumnType("decimal(18, 0)");

});

关于为什么它向上舍入而不是保持为 2.60895 的任何想法?

【问题讨论】:

  • decimal(18, 0) 不是表示“总共 18 位,小数点右侧没有”吗? docs.microsoft.com/en-us/sql/t-sql/data-types/…
  • 18,0 表示您总共有 18 位小数,小数点右侧有 0 个数字。所以这基本上是一个 18 位的整数。先解决这个问题,看看会发生什么。
  • 你说的完全正确.. 震惊我错过了。现在去测试
  • 成功了.. 我花了很多时间盯着错误的地方来解决这个问题!谢谢大家 - 我会标记完成
  • @DavidG 无论如何都应该作为错字关闭。

标签: c# .net-core-2.0


【解决方案1】:

答案由 Flydog57 和 cmets 中的 Train 提供。

列类型应该是 18, 6 - 而不是 18, 0,因为小数点右侧没有数字

【讨论】:

  • 太晚了,好吧。我在达拉斯。 Tje 温度在一夜之间下降了 40 华氏度。我可以用帽子
猜你喜欢
  • 1970-01-01
  • 2012-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-13
  • 1970-01-01
相关资源
最近更新 更多