2013-01-23 1 views
2

위도와 경도를 사용하는 모델이 있지만 모델을 만들 때 어떤 이유로이 값은 -81.39522999999997과 같이 전체 값을 저장하지 않고 위도/경도를 소수 둘째 소수로 반올림합니다. -81.39000000000000으로 저장됩니다. 어떻게 해결할 수 있습니까?mvc3 10 진수는 2 자리 반올림합니다

내 모델은 뷰가

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

이 내 MSSQL이 longit 진수 (16, 14)

로 저장하고 신속하게 질문 16, 14입니다

public decimal? longit { get; set; } 

입니다 103.39522999999997의 경도가있는 경우 왼쪽 2 자리, 오른쪽 14 자리를 의미하며 오류가 발생합니까? 과학

public double? longit { get; set; } 

진수의 돈을 위해, 두 배의 : 그것은 (16,13)을 할 것이기 때문에 당신이 정밀 이런 종류의 필요한 경우이 ..

답변

5

헤이 모두가 내가

공공 it..in 당신이 이제까지는

  1. 당신이 당신의 엔티티 테이블을 초기화 어디 컨텍스트 클래스에 갈 필요하고 생각하는 경우 .. 작업을 수행하는 방법을 배웠습니다 DbSet relistings {get; 세트; 는 x => x.mydecimal 당신이 다음 원하는 소수 특성이 offcourse} 다음이 코드

    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 
        } 
    
    를 재 열거하는

쓰기 것과 비슷하면 소수점 다음에 모델의 이름입니다 와 함께 당신이 원하는 물건을 얼마나 정확하게 넣었습니까? 작품은 매력을 좋아합니다.

2

사용 double 대신 decimal 소수 작업 내 처음이다 . 여기서 과학을하고 (위도와 경도를 계산) 돈을 다루지 않으므로 올바른 데이터 유형을 사용하는 것이 좋습니다.

+0

와우, 알고 좋은 이잖아. –

+1

[MSDN] (http://msdn.microsoft.com/en-us/library/system.decimal(v=vs.100).aspx)에 따르면 그렇지 않습니다. 'decimal '은 최소 반올림 오류가있는 28 자리 정밀도 (및 범위)가 필요할 때마다 적합합니다. – HABO

+0

대린스는 $$$을 의미하는 소수점 이하 2 자리라는 것을 지적합니다. –

1

제 경우에는 십진수로 번역 한 엔티티 프레임 워크를 사용했습니다 (SQL Server Decimal(9,6)은 최대 0.1m 인 것으로 보입니다).

위도/경도는 double의 정밀도에 가깝습니다.

는 어쨌든 나는 내 위도/경도 특성에 DisplayFormatAttribute을 넣어 여기에 MVC를 방지 할 수 있었다 :

[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = {0:0.######})]