2

緯度と経度を取り込むモデルがありますが、何らかの理由でモデルが作成されると、値全体を保存するのではなく、緯度/経度を小数点以下2桁に丸め続けます。たとえば、この-81.39522999999997は-81.3900000000000として保存されます。修正方法を教えてください。これ?

私のモデルは

public decimal? longit { get; set; }

ビューは

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

このための私のMSSQLはlongitDecimal(16,14)として保存されます

簡単な質問16,14は、経度が103.39522999999997の場合、左に2桁、右に14桁を意味しますが、エラーが発生しますか?(16,13)になるので、小数を扱うのはこれが初めてです。

4

4 に答える 4

7

やあみんな私はそれを行う方法を学びました..あなたがそれをやろうと思ったことがある場合に備えて

  1. エンティティテーブルを初期化する Context クラスに移動する必要があります..

    public DbSet relistings { get; 設定; それに似ている場合は、このコードを記述します

    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

私の場合、それを 10 進数に変換するエンティティ フレームワークを使用しました (Decimal(9,6)これは最大 0.1m.

緯度/経度は double の精度に近い必要はありません。

DisplayFormatAttributeいずれにせよ、緯度/経度のプロパティにを追加することで、ここで MVC と戦うことができました。

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

この種の精度が必要な場合は、double代わりに使用してください。decimal

public double? longit { get; set; }

10進数はお金のため、2進数は科学のためです。ここでは科学(緯度と経度の計算)を行っており、お金を扱っていないため、正しいデータ型を使用することをお勧めします。

于 2013-01-23T20:49:12.253 に答える