Forum: D Programlama Dili RSS
double sayıdan dizgiye çevirirken ondalık basamağı nasıl ayarlayabiliriz
erdem (Moderatör) #1
Üye Tem 2009 tarihinden beri · 895 mesaj · Konum: Eskişehir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: double sayıdan dizgiye çevirirken ondalık basamağı nasıl ayarlayabiliriz
[Resim: http://www.erdem.tk/resim/resim/doublesoru1.png]

Yukarıdaki gibi fiyat bilgisi tutan verilerimiz var. Bu veriler double tipinde. Programdan baktığımız zaman şuna benzer çıktı veriyor.

Fiyat = 4,25
Fiyat = 4,25
Fiyat = 2,25
Fiyat = 2,25
Fiyat = 0,8
Fiyat = 0,8
Fiyat = 4,25
Fiyat = 4,25
Fiyat = 1
Fiyat = 1
Fiyat = 0,8
Fiyat = 0,8
Fiyat = 1
Fiyat = 1

Yapmak istediğim bunların basamak sayısını ayarlamak. Bunu yapmanın başka bir yöntemi var mı bilmiyorum ama bana basitçe böyle önerdikleri için double sayıyı string'e çeviriyorum.
        auto fiyat = model.getValue(erişici, 1).getDouble();
        writeln("Fiyat = ", fiyat);
        hücreÇizici.setProperty("text", to!string(fiyat));

[Resim: http://www.erdem.tk/resim/resim/doublesoru2.png]

Ama dikkat ederseniz 1 ve 0,8 in yanındaki ondalık basamaklar kayboldu. Bunları 1,00 ve 0,80 şeklinde göstermenin bir yolu var mı acaba.
Avatar
zekeriyadurmus #2
Kullanıcı başlığı: Talha Zekeriya Durmuş
Üye Eki 2012 tarihinden beri · 701 mesaj · Konum: Samsun/Türkiye
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Sanırım istediğin şey

        auto fiyat = model.getValue(erişici, 1).getDouble();
        writeln("Fiyat = ", "%.2f".format(fiyat));
        hücreÇizici.setProperty("text", "%.2f".format(fiyat));

Ek olarak öğrendiğim bir şey varsa o da ondalıklı sayıları (özellikle de para) hiçbir zaman ondalıklı olarak tutmamak :) Onun yerine int olarak tutmak mantıklı.

Şöyle ki. 1 Lira 100 Kuruş olduğu için integerları ekrana yazdırdığımızda aşağıdaki gibi bir çıktı alırız.

Fiyat = 425
Fiyat = 425
Fiyat = 225
Fiyat = 225
Fiyat = 80
Fiyat = 80
Fiyat = 425
Fiyat = 425
Fiyat = 100
Fiyat = 100
Fiyat = 80
Fiyat = 80
Fiyat = 100
Fiyat = 100

Fiyat bilgisini yukarıdaki gibi saklamak daha mantıklı olur.

Bir şirket için PHP ile yaptığım CRM ve muhasabe karışımı programda verileri PHP'ye yollarken 139.20 şeklinde floating gelen para miktarı mucizevi bir şekilde 139.19 a dönüşüyordu :)

intval(floatval("139.20") * 100)

Bunun yerine şimdilik bu sayıyı string olarak işliyorum önce sayıyı .2f formatter de olduğu gibi 2 ondalıklı bir biçime  çeviriyorum . ve , gibi karakterleri temizliyorum tamsayıya çevirip saklıyorum.

Ek olarak 4.25 TL ye 18% vergi eklerken 5.015 TL şeklinde pekte istemediğimiz bir floating sayıya dönüşüyor. Fatura oluştururken bu 0.005 kuruşlar faturada birkaç kuruşluk sapmalara sebebiyet veriyordu.

Konuyla alakalı olarak

http://stackoverflow.com/questions/3730019/why-not-use-dou…

Zekeriya
Bilgi meraktan gelir...
Bu mesaj 2 defa değişti; son değiştiren: zekeriyadurmus; zaman: 2017-02-11, 17:37.
erdem (Moderatör) #3
Üye Tem 2009 tarihinden beri · 895 mesaj · Konum: Eskişehir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Teşekkürler! :)

Bu şekilde bir değişkene atayıp kullanınca oldu.

        auto fiyat = model.getValue(erişici, 1).getDouble();
        auto yeniFiyat =  "%.2f".format(fiyat);
        hücreÇizici.setProperty("text", yeniFiyat);

[Bu arada resmi aslında ortalamak istemiştim. Nasıl yapılacağını bilen var mı acaba? ]

[Resim: http://www.erdem.tk/resim/resim/doublesoru3.png]
Abdullah #4
Üye Ağu 2015 tarihinden beri · 18 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
[Bu arada resmi aslında ortalamak istemiştim. Nasıl yapılacağını bilen var mı acaba? ]

Böyle daha güzel durdu  : )
erdem (Moderatör) #5
Üye Tem 2009 tarihinden beri · 895 mesaj · Konum: Eskişehir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Abdullah:
Böyle daha güzel durdu  : )

Evet gayet güzel durdu :)

zekeriyadurmus:
Fiyat bilgisini yukarıdaki gibi saklamak daha mantıklı olur.

        auto yeniFiyat =  "%.2f".format(cast (double) fiyat / 100);

Bu değişikliği de yaptım. Artık fiyatları kuruş olarak saklıyor. Ama kullanıcı açısından programda görsel bir değişiklik olmadı.
Avatar
zekeriyadurmus #6
Kullanıcı başlığı: Talha Zekeriya Durmuş
Üye Eki 2012 tarihinden beri · 701 mesaj · Konum: Samsun/Türkiye
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
erdem:
Bu değişikliği de yaptım. Artık fiyatları kuruş olarak saklıyor. Ama kullanıcı açısından programda görsel bir değişiklik olmadı.

Görsel bir değişiklik olmaması gerekir zaten. Burada amaç fiyatları saklarken ya da kuruş üzerinden hesap yaparken olası hataların önüne geçmek.

Zekeriya
Bilgi meraktan gelir...
Doğrulama Kodu: VeriCode Lütfen resimde gördüğünüz doğrulama kodunu girin:
İfadeler: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Özel Karakterler:
Bağlı değilsiniz. · Şifremi unuttum · ÜYELİK
This board is powered by the Unclassified NewsBoard software, 20100516-dev, © 2003-10 by Yves Goergen
Şu an: 2017-04-30, 11:43:13 (UTC -07:00)