asp.net MVC 3 - MVC3 十进制四舍五入 2 位



>我有一个接受纬度和经度的模型,但由于某种原因,当创建模型时,它会将纬度/经度四舍五入到小数点后 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)这是我第一次使用小数。

嘿,大家好,我学会了怎么做。万一你想过这样做

  1. 您需要转到初始化实体表的上下文类。

    公共 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);
    }
}

相关内容

  • 没有找到相关文章

最新更新