2

我有一个接受纬度和经度的模型,但是由于某种原因,在创建模型时,它会不断将纬度/经度四舍五入到小数点后 2 位,而不是保存整个值,例如这个 -81.39522999999997 保存为 -81.39000000000000 我该如何修复这?

我的模型是

public decimal? longit { get; set; }

观点是

@Html.HiddenFor(model => model.longit, new {@Value = "-81.39522999999997" })

我的 MSSQL 保存为 longit Decimal(16,14)

如果我的经度为 103.39522999999997,那么快速问题 16,14 表示左侧 2 位数字和右侧 14 位数字,是否会产生错误?因为它将是 (16,13) 这是我第一次使用小数..

4

4 回答 4

7

嘿大家我学会了怎么做..如果你曾经想过这样做

  1. 您需要转到初始化实体表的 Context 类..

    公共 DbSet 重新列出 { 获取;放; } 看起来类似然后你写这段代码

    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是您想要的小数点属性,然后您可以精确地输入您想要的东西有多精确.. 工作就像一个魅力

于 2013-01-24T01:06:48.193 回答
2

在我的情况下,我使用实体框架将其转换为十进制(来自 SQL Server Decimal(9,6),因为这似乎高达 0.1m。

纬度/经度不需要任何接近双精度的地方。

无论如何,我可以通过DisplayFormatAttribute在我的纬度/经度属性上添加一个来对抗 MVC:

[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = {0:0.######})]
于 2016-02-02T00:10:01.703 回答
1

如果您需要这种精度,请使用double而不是:decimal

public double? longit { get; set; }

十进制代表金钱,双精度代表科学。由于您在这里做科学(计算纬度和经度)而不是处理金钱,因此您最好使用正确的数据类型。

于 2013-01-23T20:49:12.253 回答
0

旧帖子,但是当更新的货币汇率仅以小数点后 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);
    }
}
于 2018-04-07T19:56:24.753 回答