mvc3 decimal закръглява 2 места

Имам модел, който приема географски ширини и дължини, но по някаква причина, когато моделът е създаден, той продължава да закръгля географската ширина/дължина до 2 знака след десетичната запетая, вместо да запази цялата стойност, например това -81.39522999999997 се записва като -81.390000000000000 как мога да поправя това?

моят модел е

public decimal? longit { get; set; }

гледката е

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

и моят MSSQL за това се записва като longit Decimal(16,14)

и бърз въпрос 16,14 означава 2 цифри отляво и 14 отдясно, ако имам географска дължина 103.39522999999997 ще струва ли грешка? тъй като би било (16,13), това е първият ми път, когато работя с десетични знаци..


person user1949387    schedule 23.01.2013    source източник


Отговори (4)


здравейте всички, научих се как да го правя... в случай, че някога си помислите да го направите

  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
       }
    

relisting е името на модела, в който е десетичният знак, тогава разбира се x=>x.mydecimal е десетичното свойство, което искате, след което има точност, която въвеждате в това колко точни искате да бъдат нещата.. работи като чар

person user1949387    schedule 24.01.2013

В моя случай използвах рамка на обект, която го преведе в десетична (от SQL Server Decimal(9,6), тъй като това изглежда до 0,1m.

географска ширина/дължина не се нуждае никъде близо до точността на двойно.

Във всеки случай успях да се преборя с MVC тук, като поставих DisplayFormatAttribute в свойствата си за географска ширина/дължина:

[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = {0:0.######})]
person m.t.bennett    schedule 02.02.2016

Използвайте double вместо decimal, ако имате нужда от този вид точност:

public double? longit { get; set; }

Десетични за пари, двойни за наука. Тъй като тук се занимавате с наука (изчислявате географска ширина и дължина), а не се занимавате с пари, по-добре използвайте правилния тип данни.

person Darin Dimitrov    schedule 23.01.2013
comment
Не е така според MSDN . decimal е подходящо винаги, когато се изисква 28-цифрена точност (и диапазон) с минимални грешки при закръгляване. - person HABO; 24.01.2013
comment
Мисля, че Даринс посочва, че десетичната запетая е 2 знака след десетичната запетая, ако е предназначена за $$$. - person Dave Alperovich; 24.01.2013
comment
@DaveA - Моят компилатор трябва да е повреден: decimal foo = 1m / 7m; -- Result: 0.1428571428571428571428571429M. OP може да има проблем с форматирането на изхода, но decimal се справя със задачата. - person HABO; 24.01.2013
comment
тогава id казват, че скрита HTML маркировка би била по-добра. HiddenFor има тенденция да форматира данните си според очакваните типове. - person Dave Alperovich; 24.01.2013
comment
Десетични знаци за пари, двойни за наука. Не мога да преценя колко грешно е това изречение. Decimal е за случаите, когато се изисква висока, точна, висока прецизност и се притеснявате от сложни грешки. Удвояване точно когато се изисква висока прецизност при малки количества; Колкото по-голям става дубълът, толкова повече губи прецизност. Десетичният знак запазва своята точност независимо от числото. - person Immortal Blue; 13.07.2015

Стара публикация, но това също ме обърка за известно време, когато актуализираните валутни курсове бяха запазени в базата данни само с 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);
    }
}
person RickL    schedule 07.04.2018