lostyazilim
tr.link

Hesaplamalarda -1.xxx sayısının çıkması

9 Mesajlar 1.383 Okunma
acebozum
tr.link

Exor Exor WM Aracı Kullanıcı
  • Üyelik 07.11.2013
  • Yaş/Cinsiyet 38 / E
  • Meslek Web&Grafik Tasarım
  • Konum Samsun
  • Ad Soyad B** B**
  • Mesajlar 169
  • Beğeniler 16 / 7
  • Ticaret 0, (%0)
Merhaba

$islistesi = mysql_query("SELECT * FROM isler WHERE isdurum>='9' ORDER BY istarih ASC"); // isler tablosunda bulunan veriler çekiliyor.
if(mysql_affected_rows()){
while($il=mysql_fetch_array($islistesi)) {
$isid=$il['isid'];
$istanimi=$il['istanimi'];
$isadi=$il['isadi'];
$isfiyat=$il['isfiyat'];
$isfatura=$il['isfatura'];
$istarih=date('d.m.Y', strtotime($il['istarih']));
$isdurum=$il['isdurum'];
/////
$isfiyati=mysql_query("SELECT SUM(oafiyat) FROM odemeal WHERE oaisid='$isid'"); // İşin fiyatının olduğu odemeal tablosundan iş fiyatı çekiliyor.
$isf=mysql_fetch_array($isfiyati);
if($isfatura==0){ // Eğer fatura kesilmeyecekse fiyat direkt alınıyor.
$isinfiyati=$isf['SUM(oafiyat)'];
}else{ // Eğer fatura kesilecekse %18 Kdv eklenmesi için 1.18 ile çarpılıyor.
$isinfiyati=$isf['SUM(oafiyat)']*1.18;
}
$fiyattopla=mysql_query("SELECT SUM(ofiyat) FROM odemeler WHERE oisid='$isid' AND odurum=1"); // Yapılan ödemeler hesaplanıyor.
$ft=mysql_fetch_array($fiyattopla);
$toplamfiyat=$ft['SUM(ofiyat)'];

Kodların açıklamalarını yazdım. Şimdi sorunumu söyleyeyim.
Yapılan iş fiyatı: 9746 TL
Fatura KDV Tutarı: 1754.28 TL
Toplam Ödenmesi Gereken Tutar: 11.500,28 TL
Yapılan Ödeme: 11.500,28 TL
Bu durumda hesapta 0.00 TL gözükmesi gerekmekte fakat -0.00 TL gözüküyor.
Kodlarda olan $isinfiyati değişkeni (işin fiyatını hesaplıyor) ve $toplamfiyat (Ödenen fiyatı hesaplıyor) değişkeni ekrana yazdırdığımda ikisinde de 11500,28 fiyatını görüyorum. Fakat bu iki değişkeni çıkarma işlemi yaptığımda;
$hesap=$isinfiyati-$toplamfiyat;
Sonuç -1.8189894035459E-12 böyle bir rakam oluyor. Bu sorunu nasıl çözebilirim?

Not: Yuvarlama yapamıyorum çünkü fiyatlar baz alınarak ödeme ve fatura kesiliyor yani tam fiyat çıkması gerekmekte.
 

 

wmaraci
reklam

ASametYildirim ASametYildirim Saygı, Sevgi, Anlayış. Kullanıcı
  • Üyelik 16.06.2017
  • Yaş/Cinsiyet 25 / E
  • Meslek Bilgisayar mühendisi öğrencisi
  • Konum Ankara
  • Ad Soyad S** Y**
  • Mesajlar 3826
  • Beğeniler 2399 / 1874
  • Ticaret 97, (%100)
Hocam burada sanki mantık hatası var şöyle yapabilir misiniz?

$hesap=$toplamfiyat-$isinfiyati;
 

 

Exor Exor WM Aracı Kullanıcı
  • Üyelik 07.11.2013
  • Yaş/Cinsiyet 38 / E
  • Meslek Web&Grafik Tasarım
  • Konum Samsun
  • Ad Soyad B** B**
  • Mesajlar 169
  • Beğeniler 16 / 7
  • Ticaret 0, (%0)
Bu durumda da sonuç 1.8189894035459E-12 oluyor. Yani eksi yerine artı oluyor.
 

 

0ktay 0ktay strdex Kullanıcı
  • Üyelik 01.02.2018
  • Yaş/Cinsiyet 26 / E
  • Meslek Yazılım öğrencisi
  • Konum Antalya
  • Ad Soyad O** Ş**
  • Mesajlar 603
  • Beğeniler 25 / 155
  • Ticaret 2, (%100)
if ($hesap == 0) {
$hesap = abs($hesap);
}


Sorununu tam anlamadım ama umarım budur :)

Bu arada eklemen gereken yer;

$hesap=$isinfiyati-$toplamfiyat;
if ($hesap == 0) { // toplama yaptığın işlemin altına eklemelisin.
$hesap = abs($hesap);
}


Birde sayı 0'dan yukarı isemi negatif dönüyor yoksa sadece sıfır'a eşitkenmi ?
 

 

Eğitimin pahalı olduğunu düşünüyorsanız, cehaletin bedelini hesaplayın.
wmaraci
wmaraci

ASametYildirim ASametYildirim Saygı, Sevgi, Anlayış. Kullanıcı
  • Üyelik 16.06.2017
  • Yaş/Cinsiyet 25 / E
  • Meslek Bilgisayar mühendisi öğrencisi
  • Konum Ankara
  • Ad Soyad S** Y**
  • Mesajlar 3826
  • Beğeniler 2399 / 1874
  • Ticaret 97, (%100)

Exor adlı üyeden alıntı

Bu durumda da sonuç 1.8189894035459E-12 oluyor. Yani eksi yerine artı oluyor.


Hocam tahminimce sondaki E-12 bu sayının 12 basamağının olduğunu belirtiyor. Yani pi sayısını hesaplarken bütün basamaklarını göremezsiniz ve sonuna bu tarz bir etiket koyar bırakır. Siz isterseniz ilk 4 basamağını alın öyle işlem yaptırın. Yani 1.818tl gibi.
 

 

Exor Exor WM Aracı Kullanıcı
  • Üyelik 07.11.2013
  • Yaş/Cinsiyet 38 / E
  • Meslek Web&Grafik Tasarım
  • Konum Samsun
  • Ad Soyad B** B**
  • Mesajlar 169
  • Beğeniler 16 / 7
  • Ticaret 0, (%0)
0ktay abs fonksiyonunu kullanamam. Bu sistem şöyle gelen işlerin parasal takibini yapıyorum. Ödemeleri giriyorum borçları giriyorum. A şirketinin 9746 TL borcu varmış kdv ile bu borç 11.500,28 TL bu şirket borcunu tam olarak ödedi ve bende sisteme 11.500,28 olarak giriş yaptım. Yani A şirketinin borcu tam olarak ödenmiş oldu. ayrinti.php sayfamda sonuç 0.00 olarak çıkıyor fakat -0.00 olarak gözüküyor.
Aslında $hesap=$isinfiyati-$toplamfiyat; bunu kullanmıyorum sistemimde fakat deneme amaçlı yaptığımda bana -1.xxx sonucunu verdi ilk defa başıma geldi ve bir kaç seçenek ile kurtulamadım. Sizin verdiğiniz abs sistemini de kullanamam çünkü bu sıkıntı girişlerin 2 tanesinde böyle diğerlerinde problem yok.

ASametYildirim Size de arkadaşa dediğim gibi söyleyeceğim aslında bu çıkarma işlemini kullanmıyorum sadece deneme amaçlı yaptım ve böyle bir sonuç çıktı bu sonucun 0a eşit olmasını istiyorum. Neden böyle birşey çıktığına da anlam veremedim açıkcası :)

Umarım biraz daha aydınlatmışımdır sizi.
 

 

0ktay 0ktay strdex Kullanıcı
  • Üyelik 01.02.2018
  • Yaş/Cinsiyet 26 / E
  • Meslek Yazılım öğrencisi
  • Konum Antalya
  • Ad Soyad O** Ş**
  • Mesajlar 603
  • Beğeniler 25 / 155
  • Ticaret 2, (%100)
Help edit.
 

 

Eğitimin pahalı olduğunu düşünüyorsanız, cehaletin bedelini hesaplayın.

AhmetKarabulut AhmetKarabulut WM Aracı Kullanıcı
  • Üyelik 11.09.2013
  • Yaş/Cinsiyet 30 / E
  • Meslek Bilgisayar Mühendisi
  • Konum İzmir
  • Ad Soyad A** K**
  • Mesajlar 1077
  • Beğeniler 361 / 361
  • Ticaret 33, (%100)
Hocam mobildeyim tam inceleyemedim kodlarınızı fakat sorununuz sanıyorum ki görünmeyen floating sayılarda.

Atıyorum 10.00000000'den 10.00000001' i çıkarırsanız sonuç -0.00 görünecektir fakat aslında sondaki 0dan kaynaklı bir durum.
 

 

Exor Exor WM Aracı Kullanıcı
  • Üyelik 07.11.2013
  • Yaş/Cinsiyet 38 / E
  • Meslek Web&Grafik Tasarım
  • Konum Samsun
  • Ad Soyad B** B**
  • Mesajlar 169
  • Beğeniler 16 / 7
  • Ticaret 0, (%0)
@AhmetKarabulut Sanırım bu dediginiz doğru
 

 

Site Ayarları
  • Tema Seçeneği
  • Site Sesleri
  • Bildirimler
  • Özel Mesaj Al