>我有一个接受纬度和经度的模型,但由于某种原因,当创建模型时,它会将纬度/经度四舍五入到小数点后 2 位,而不是保存整个值,例如这个 -81.39522999999997 被保存为 -81.3900000000000000 我该如何解决这个问题?
我的模型是
public decimal? longit { get; set; }
视图是
@Html.HiddenFor(model => model.longit, new {@Value = "-81.39522999999997" })
我的MSSQL被保存为十进制(16,14)
和快速问题 16,14 表示向左 2 位数字和向右 14 位数字 如果我的经度为 103.39522999999997,它会花费错误吗? 因为它将是(16,13)这是我第一次使用小数。
嘿,大家好,我学会了怎么做。万一你想过这样做
-
您需要转到初始化实体表的上下文类。
公共 DbSet 重新列出 { get; set; } 看起来类似于您编写此代码时的内容
public class mycontext : DbContext { public DbSet<relisting> relistings { get; set; } //this is the code you write protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Entity<relisting>().Property(x => x.latit).HasPrecision(16, 14); modelBuilder.Entity<relisting>().Property(x => x.longit).HasPrecision(16, 14); } //ends here }
重新列出是小数点所在的模型的名称,然后偏离 x=>x.mydecimal 是您想要的十进制属性,然后您以精度输入您希望事情的准确性。 作品喜欢魅力
就我而言,我使用了将其转换为十进制的实体框架(从SQL Server Decimal(9,6)
,因为这似乎高达 0.1m。
纬度/经度不需要接近双精度的任何地方。
无论如何,我能够通过对我的纬度/经度属性进行DisplayFormatAttribute
来对抗MVC:
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = {0:0.######})]
如果需要这种精度,请使用double
而不是decimal
:
public double? longit { get; set; }
十进制的钱,双倍的科学。由于您在这里做科学(计算纬度和经度)而不是处理金钱,因此您最好使用正确的数据类型。
旧帖子,但是当更新的货币汇率仅保存到数据库中时,这让我感到困惑,只有 2 位小数(事实证明,这是默认值)。我对实体使用模型映射,可以这样设置:-
public class CurrencyMapping : EntityTypeConfiguration<Currency>
{
public CurrencyMapping()
{
HasKey(x => x.Id);
Property(x => x.Id).IsRequired();
// .HasPrecision(precision, scale)
// 'precision' is the total number of digits the db will store,
// regardless of where the decimal point falls
// 'scale' is the number of decimal places that will be stored
Property(x => x.Rate).IsRequired().HasPrecision(16, 6);
}
}