none
Mvc - Veritabanındaki virgül ile ayrılmış ondalık parayı noktalı getirme RRS feed

  • Soru

  • Merhabalar

    Veri tabanına ondalık kısmı virgül ile kayıt ediyorum ama çekerken .(nokta) ile getiriyor web.config globalization ayarları fayda etmiyor.

    <globalization culture="tr-TR" uiCulture="tr-TR" requestEncoding="iso-8859-9" responseEncoding="iso-8859-9"   fileEncoding="iso-8859-9" />

    Ürün sayfasından javascript ile çekiyorum controller kodu aşağıdaki gibi

    [Route("GetFiyatlar/{tableSizeId}")]
    public JsonResult GetFiyatlar(int tableSizeId)
    {
        var olcuFiyat = (from of in db.TabloFiyatlari where of.TableSizeId == tableSizeId select of).FirstOrDefault();
        return Json(olcuFiyat, JsonRequestBehavior.AllowGet);
    }

    Model

    public int Id { get; set; }
    [DataType(DataType.Currency)]
    public decimal AlisFiyati { get; set; }
    [DataType(DataType.Currency)]
    public decimal SatisFiyati { get; set; }


    6 Eylül 2016 Salı 17:21

Yanıtlar

  • bence hiçbirşeyi çözememişsin;

    ... select new { SatisFiyati = of.SatisFiyati.ToString("c2") , ... }).FirstOrDefault();
    kadar basit bir şey yapman yeterli idi. 


    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com


    7 Eylül 2016 Çarşamba 19:36
    Moderatör

Tüm Yanıtlar

  • Yanlis olan ne ki? Veritabanina sayiyi virgulle kaydetmek diye bir sey yok. Kaydedilen binary bir deger. Virgulle kaydetmek icin onun sayi degil string olmasi gerekir ancak o zamanda sacma olur. Data tipiniz Currency, ve sonuc dogru olarak 21.50 goruluyor. 21,50 sadece bir goruntu formati olabilir (yoksa 21 ve 50 diye iki ayri sayi olurdu), nasil istiyorsaniz oyle formatlarsiniz.
    6 Eylül 2016 Salı 17:32
    Yanıtlayıcı
  • yukarıdaki resimde görüldüğü üzere 21,50 yani vigüllü kayıt etmişim ama çekerken 21.50 şeklinde geliyor. Neden kayıt ettiğim şekilde gelmiyor da virgülü noktaya çeviriyor?
    6 Eylül 2016 Salı 18:18
  • yukarıdaki resimde görüldüğü üzere 21,50 yani vigüllü kayıt etmişim ama çekerken 21.50 şeklinde geliyor. Neden kayıt ettiğim şekilde gelmiyor da virgülü noktaya çeviriyor?

    "yukarıdaki resimde görülene" Regional Settings'i en-US ayarlı bir işletim sisteminde tekrar bakarmısın?

    Çetin yazmış sana ona odaklanırmısın, O gördüğün virgüllü sayılar database deki değer değil, Management Studio nun sana formatlayıp gösterdiği değer. Alttaki resimde de VisualStudio'un formatlayıp gösterdiği değer. Aslında database de 10001101010101101000110101010110 gibi bi sayı var.

    Sende kullanıcına formatlayıp göster.


    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com



    7 Eylül 2016 Çarşamba 08:39
    Moderatör
  • Bilgisayarlar verileri insanların algıladığı gibi algılamaz. Onlar için virgül, nokta gibi kavramlar yoktur. Sana gösterirken senin bölge ayarların nasılsa ona göre gösterir. Binlik ayracı olarak . (nokta) veya , (virgül) veya boşluk kullanman gibi değişiklik gösterebilecek şeyleri senin verilerinin arasına saklayarak gereksiz yer kullanmaz. Onun yerine bu tür bilgileri uygulamadan veya işletim sisteminden alır. Uygulama içinde gösterirken Culture bilgisi vererek istediğin gibi formatlayabilirsin. Bu senin veritabanında kaydedilen verini etkilemez.


    • Düzenleyen Olcay GUZEL 7 Eylül 2016 Çarşamba 08:42
    7 Eylül 2016 Çarşamba 08:41
  • Tekrar soyluyorum, "21,50 yani virgullu kaydetmisim" diye bir sey olamaz. Sen virgullu ya da noktali kaydedemezsin, kaydedilen binary bir deger. Nokta virgul gibi ayiraclar sadece biz olumluler icin. Kullandigin programlama dili Ingilizce ve kullanilan tum sayi formatlarinda ondalik ayirac noktadir. Debuggerlar sana 21.50 seklinde gosterir. O sayiyi sen istedigin gibi formatlayarak "string" gosterimde ister 21.50, ister 21,50 hatta istersen 21 Lira 50 Kurus, ya da "Yirmibirbucuk"  diye gosterebilirsin. Bunun veritabanindaki kaydedilmis sekli her zaman ayni binary degerdir ve basit sekilde programcilik acisindan 21.50'dir.

    Bit, byte, binary, hex ... nedir, bilgisayarlarda degisik degerler nasil kaydedilir gibi temel bilgileri mutlaka ogrenmelisiniz.

      Not: "MVC veritabaninda" diyorsun basliginda, ama MVC veritabani diye birsey de yok.

    7 Eylül 2016 Çarşamba 11:35
    Yanıtlayıcı
  • Teşekkürler jquery.glob.js ile formatlayarak sorunu çözdüm.

    Dediğin gibi "Kullandigin programlama dili Ingilizce ve kullanilan tum sayi formatlarinda ondalik ayirac noktadir." sorunum bundan kaynaklı anladığım kadarı ile Currency olunca kendi formatında getiriyor, ya string kayedeceğiz ya da kendimiz formatlayacağız,

    temel bilgileri biliyorum sonuçta arada 1 farkı var :)

    00110010 00110001 00101110 00110101 00110000 21.50
    00110010 00110001 00101100 00110101 00110000 21,50

    Not cevap:Mvc de sorun yaşadığımı başlıkta belirtmek için yazmıştım yoksa localDb kullanıyorum, yanlış anlama olmasın diye  "-" atarak başlığı düzelttim, tekrar teşekkürler.

    @Olcay baktım ama sıkıntı görünmüyor, zaten Win Türkçe

    7 Eylül 2016 Çarşamba 17:31
  • "ya string kayedeceğiz"

    evet boyle yaparak dertsiz basina dert alabilirsin :) 


    7 Eylül 2016 Çarşamba 17:39
    Yanıtlayıcı
  • bence hiçbirşeyi çözememişsin;

    ... select new { SatisFiyati = of.SatisFiyati.ToString("c2") , ... }).FirstOrDefault();
    kadar basit bir şey yapman yeterli idi. 


    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com


    7 Eylül 2016 Çarşamba 19:36
    Moderatör