Kodları lütfen aşağıdaki butonları kullanarak renklendirin. Örnek: <php> echo "Selam Dünya"; </php>
Yardım
karakter kaldı

PHP de Veri Tipi Problemi

Arkadaşlar, yazdığım bir emlak scripti için merkez bankasının today.xml dosyasından günlük kurları çekiyorum. Çektiğim satış fiyatlarını hem anasayfada yayınlıyorum hemde emlak fiyatını diğer kurlara çevirmek için kullanıyorum.

Her şey tamam fakat emlak fiyatını, satış fiyatına böldüğümde sonuç çıkmıyor. Bende gelen satış fiyatının veri tipine baktım ve "string" olduğunu gördüm. Yani matematiksel işlem yapamıyorum. Gelen veriyi;
$oran = (integer) $this->satis();

şeklinde integer yapmama rağmen sonuç değişmedi. Benim anlamadığım ise site içinde "1.7454" şeklinde gözüken değerin neden string dönmesi?

Kur Sınıfım:
<?php

// Class Adı   : Currency Class v1.0
// Tarih       : 02.08.2011
// Hazırlayan  : Ali Emre Çakmakoğlu
// Web - E-Mail: www.gncart.net | mail@gncart.net
// Gereksinim  : PHP 5+

if(version_compare(PHP_VERSION,'5.0.0','<')) exit('Özür dileriz. Bu classın kullanımı için PHP versiyonu yeterli değil. Min. = PHP 5.0');

class Currency
{
    
    // XML URL
    private $file = "http://www.tcmb.gov.tr/kurlar/today.xml";
    
    // EMPTY PATTERN
    private $mainPattern = "";
    
    // DAILY CURRENCY TYPES
    private $types = array(
    
        '1' => 'USD',   // Amerikan Doları
        '2' => 'EUR',   // Euro
        '3' => 'GBP',   // Sterlin / Pound
        '4' => 'CAD',   // Kanada Doları
        '5' => 'AUD',   // Avustralya Doları
        '6' => 'DKK',   // Danimarka Kronu
        '7' => 'SEK',   // İsviçre Kronu
        '8' => 'CHF',   // İsviçre Frangı
        '9' => 'NOK',   // Norveç Kronu
        '10' => 'JPY',  // Japon Yeni
        '11' => 'SAR',  // Suudi Arabistan Riyali
        '12' => 'KWD',  // Kuveyt Dinarı
        '13' => 'TUB',  // Rus Rublesi
        '14' => 'RON',  // Yeni Rumen Leyi
        '15' => 'IRR',  // İran Riyali
        '16' => 'BGN',  // Bulgar Levası
    
    );
    
    
    // CONSTRUCT
    // - Verilen XML dosyasında kur tipine ($types) göre pattern oluşturur.
    // - İstediğiniz kura karşılık gelen numarayı ('1' => 'USD') yazmanız yeterli.
    
    function __construct($type){
        
        $file = file_get_contents($this->file);
        
        $totalTypes = count($this->types);
                
        $patternFirst = '<Currency Kod="'.$this->types[$type].'" CurrencyCode="'.$this->types[$type].'">';
        
        if($type != $totalTypes){ 
            
            $type02 = $type + 1;
            
            $patternLast = '<Currency Kod="'.$this->types[$type02].'" CurrencyCode="'.$this->types[$type02].'">';
            
        }else{
            
            $patternLast = '<Currency>';
            
        }
                
        $firstStep = explode($patternFirst,$file);
        
        $secondStep = explode($patternLast,$firstStep[1]);
        
        $this->mainPattern = $secondStep[0];
        
    }
    
    
    // UNIT
    // - Çıkartılan kurun "birimini" ekrana yazdırır.
    
    function Unit(){
                
        preg_match('#<Unit>(.*?)</Unit>#',$this->mainPattern,$Unit);
        
        return $Unit[0];
        
    }
    
    
    // NAME
    // - Çıkartılan kur bilgilerinin "ismini" ekrana yazdırır.
    
    function Name(){
                
        preg_match('#<Isim>(.*?)</Isim>#',$this->mainPattern,$Name);
        
        return ucfirst($Name[0]);
 
    }
    
    
    // CURRENCY NAME
    // - Çıkartılan kurun "ingilizce ismini" ekrana yazdırır.
    
    function CurrencyName(){
                
        preg_match('#<CurrencyName>(.*?)</CurrencyName>#',$this->mainPattern,$CurrencyName);
        
        return $CurrencyName[0];
 
    }
    
    
    // FOREX BUYING
    // - Çıkartılan kurun "alış fiyatını" ekrana yazdırır.
    
    function ForexBuying(){
                
        preg_match('#<ForexBuying>(.*?)</ForexBuying>#',$this->mainPattern,$ForexBuying);
        
        return $ForexBuying[0];
 
    }
    
    
    // FOREX SELLING
    // - Çıkartılan kurun "satış fiyatını" ekrana yazdırır.
    
    function ForexSelling(){
                
        preg_match('#<ForexSelling>(.*?)</ForexSelling>#',$this->mainPattern,$ForexSelling);
        
        return $ForexSelling[0];
 
    }
    
    
    // BANKNOTE BUYING
    // - Çıkartılan kurun "efektif alış fiyatını" ekrana yazdırır.
    
    function BanknoteBuying(){
                
        preg_match('#<BanknoteBuying>(.*?)</BanknoteBuying>#',$this->mainPattern,$BanknoteBuying);
        
        return $BanknoteBuying[0];
 
    }
    
    
    // BANKNOTE SELLING
    // - Çıkartılan kurun "efektif satış fiyatını" ekrana yazdırır.
    
    function BanknoteSelling(){
                
        preg_match('#<BanknoteSelling>(.*?)</BanknoteSelling>#',$this->mainPattern,$BanknoteSelling);
        
        return $BanknoteSelling[0];
 
    }
    
    
    // CROSS RATE USD
    // - Çıkartılan kurun "abd doları ile arasındaki oranı" ekrana yazdırır.
    
    function CrossRateUSD(){
                
        preg_match('#<CrossRateUSD>(.*?)</CrossRateUSD>#',$this->mainPattern,$CrossRateUSD);
        
        return $CrossRateUSD[0];
 
    }
    
    
    // CROSS RATE OTHER
    // - Çıkartılan kurun "diğer kurlar ile arasındaki oranı" ekrana yazdırır.
    // - Şu an için boş değer döndürür. Merkez bankasının XML dosyasını güncellemesi gerekiyor.
    
    function CrossRateOther(){
                
        preg_match('#<CrossRateOther>(.*?)</CrossRateOther>#',$this->mainPattern,$CrossRateOther);
        
        return $CrossRateOther[0];
 
    }
    
    

    // CONVERT CURRENCY
    // - Gelen değeri o kur bilgisine çeviririr. Emlak fiyatı 175.000 TL girilmişse bu fiyatı kur satış fiyatına bölerek kaç (dolar/euro/pound/..) olduğunu hesaplar.

    function Converter($money){
   
        echo $money / $this->ForexSelling();
    
    }
      
}

?>


Kur bilgisine ulaşmak için:
$kur = new Currency(1); // Dolar bilgilerini alıyorum.

// Emlak fiyatını o kura göre hesaplatmak için:
$kur->Converter(175000); // Emlak fiyatını değer olarak gönderdiğim zaman hata alıyorum.

+0
-0
Cevaba KatılıyorumKatılmıyorum
Cevap Yaz Yorum Yaz Arşivime Ekle Takip Et

Cevaplar

  • necmettin adlı üyenin fotoğrafı
    12 yıl önce yazılmış
    80 cevap - 0 soru
    XML içerisindeki bütün öğeler mecburen string olarak taşındığından içinden çıkardığın herşey de otomatik olarak string oluyor.
    1.7454 gibi bir değeri integer yaptığında işleme göre 1 veya 2 elde edersin. Senin ihtiyacın integer değil float anladığım kadarıyla.
    • GncArt adlı üyenin fotoğrafı GncArt
      Malesef float ile de denedim bu sefer sadece 0 yazdırdı.
      12 yıl önce yazılmış
    • necmettin adlı üyenin fotoğrafı necmettin
      Orjinal stringleri ve işlem kodlarını görebilir miyiz en azından? Hastayı görmeden teşhis koymaya çalışıyoruz..
      12 yıl önce yazılmış
    • GncArt adlı üyenin fotoğrafı GncArt
      Ekledim..
      12 yıl önce yazılmış