• 14-08-2023, 10:32:34
    #1
    Merhaba arkadaşlar. Bir PHP Sorusu ile karşınızdayım.
    Bir numara değerimiz var. Bunu Bakiye olarak değerlendirelim. Bu bakiye değeri 10.0000 olarak gönderiyoruz. Noktadan sonra 4 hane olacak şekilde decimal değer olarak veriyoruz.
    Fakat PHP' nin genel yapısı gereği 250.2000 ile 250.20 hatta 250.2 aynı sayıdır. Bu sebeple sıfırları kesiyor.
    Sıfırları kesmemesi için kullandığımız her yöntem, bakiye değerini String formatta çevirmektedir. Sayısal değer olarak kalmasını ve hiçbir şekilde string fonksiyonları kullanılarak değişmemesini istiyoruz.

    Kullandığımız yöntemler arasında, number_format, sprintf var. Ayrıca Chatcpt gibi cevaplar da denendi. Daha PHP'nin derinlerine inmek istiyoruz.
  • 14-08-2023, 10:36:02
    #2
    fatbotter.com
    Batuhan Ustun adlı üyeden alıntı: mesajı görüntüle
    Merhaba arkadaşlar. Bir PHP Sorusu ile karşınızdayım.
    Bir numara değerimiz var. Bunu Bakiye olarak değerlendirelim. Bu bakiye değeri 10.0000 olarak gönderiyoruz. Noktadan sonra 4 hane olacak şekilde decimal değer olarak veriyoruz.
    Fakat PHP' nin genel yapısı gereği 250.2000 ile 250.20 hatta 250.2 aynı sayıdır. Bu sebeple sıfırları kesiyor.
    Sıfırları kesmemesi için kullandığımız her yöntem, bakiye değerini String formatta çevirmektedir. Sayısal değer olarak kalmasını ve hiçbir şekilde string fonksiyonları kullanılarak değişmemesini istiyoruz.

    Kullandığımız yöntemler arasında, number_format, sprintf var. Ayrıca Chatcpt gibi cevaplar da denendi. Daha PHP'nin derinlerine inmek istiyoruz.

    Amaç veritabanında saklamak değilse, aşağıdaki işinizi görür mü?


    function addBakiye($bakiyeStr, $additionStr) {
        $bakiye = rtrim($bakiyeStr, '0'); // Sağdaki sıfırları kes
        $addition = rtrim($additionStr, '0');
    
        $result = bcadd($bakiye, $addition, 4); // Büyük sayılar için hesaplama fonksiyonu
        return $result;
    }
    
    $bakiyeString = '250.2000';
    $eklenecekString = '50.3000';
    
    $newBakiye = addBakiye($bakiyeString, $eklenecekString);
    
    echo $newBakiye; // Output: 300.5000
    Sonrasında da strval yapılabilir.

    Eğer sondaki sıfırlar yine de siliniyorsa, projedeki sıfır sayısı da değişken değil ise. Şöyle yapabilirsiniz: echo strval($newBakiye).'000';
  • 14-08-2023, 10:36:30
    #3
    <?php
    function formatFiyat($fiyat) {
    setlocale(LC_ALL, 'tr_TR.UTF-8');
    return
    number_format($fiyat, 2, ',', '.'); }
    $fiyat = $geometry['coordinates'][2];

    $parcaliFiyat = formatFiyat($fiyat); ?>
  • 14-08-2023, 10:39:35
    #4
    Gold üye
    Fiyatları kuruş cinsinden saklayıp gerekli yerlerde formatlayın.

    Mesela 456.50 TL lik bakiyeyi veritabanında 45650 olarak saklayın.
  • 14-08-2023, 10:39:46
    #5
    lookout adlı üyeden alıntı: mesajı görüntüle
    Amaç veritabanında saklamak değilse, aşağıdaki işinizi görür mü?


    function formatBakiye($bakiyeStr) {
        return number_format(floatval($bakiyeStr), 4, '.', '');
    }
    
    $bakiyeString = '250.2000';
    $formattedBakiye = formatBakiye($bakiyeString);
    
    echo $formattedBakiye; // Output: 250.2000
    
    // Matematiksel işlemler yaparken:
    $bakiyeValue = floatval($bakiyeString);
    $yeniBakiye = $bakiyeValue + 50.3000;
    
    echo $yeniBakiye; // Output: 300.5000
    Prometheussq1 adlı üyeden alıntı: mesajı görüntüle
    <?php
    function formatFiyat($fiyat) {
    setlocale(LC_ALL, 'tr_TR.UTF-8');
    return
    number_format($fiyat, 2, ',', '.'); }
    $fiyat = $geometry['coordinates'][2];

    $parcaliFiyat = formatFiyat($fiyat); ?>

    Php yapısı gereği number format kullanıldığında response isteği sonucunda string olarak dönüyor. Number format sonrasında floatval, float gibi fonksiyonlarda işe yaramıyor.

    LastPlayer adlı üyeden alıntı: mesajı görüntüle
    Fiyatları kuruş cinsinden saklayıp gerekli yerlerde formatlayın.

    Mesela 456.50 TL lik bakiyeyi veritabanında 45650 olarak saklayın.
    Veriyi geri almak istediğimde 456.5 olarak dönüyor sondaki 0'ı gereksiz alarak siliyor.
  • 14-08-2023, 10:42:40
    #6
    Gold üye
    Batuhan Ustun adlı üyeden alıntı: mesajı görüntüle
    Php yapısı gereği number format kullanıldığında response isteği sonucunda string olarak dönüyor. Number format sonrasında floatval, float gibi fonksiyonlarda işe yaramıyor.



    Veriyi geri almak istediğimde 456.5 olarak dönüyor sondaki 0'ı gereksiz alarak siliyor.
    Anlatamadım galiba veritabanında 456.50 TL lik veriyi 45650 olarak saklayın ve gerekli yerlerde göstermek için bölün gerektiği zaman.
  • 14-08-2023, 10:48:50
    #7
    lookout adlı üyeden alıntı: mesajı görüntüle
    Amaç veritabanında saklamak değilse, aşağıdaki işinizi görür mü?


    function addBakiye($bakiyeStr, $additionStr) {
        $bakiye = rtrim($bakiyeStr, '0'); // Sağdaki sıfırları kes
        $addition = rtrim($additionStr, '0');
    
        $result = bcadd($bakiye, $addition, 4); // Büyük sayılar için hesaplama fonksiyonu
        return $result;
    }
    
    $bakiyeString = '250.2000';
    $eklenecekString = '50.3000';
    
    $newBakiye = addBakiye($bakiyeString, $eklenecekString);
    
    echo $newBakiye; // Output: 300.5000
    Sonrasında da strval yapılabilir.

    Eğer sondaki sıfırlar yine de siliniyorsa, projedeki sıfır sayısı da değişken değil ise. Şöyle yapabilirsiniz: echo strval($newBakiye).'000';

    Maalesef tırnak içerisinde.



    LastPlayer adlı üyeden alıntı: mesajı görüntüle
    Anlatamadım galiba veritabanında 456.50 TL lik veriyi 45650 olarak saklayın ve gerekli yerlerde göstermek için bölün gerektiği zaman.
    Sorunda burdan kaynaklı bölme işlemini sonucunda istediğim formatta döndürmek için number format kullanmak gerekiyor.
  • 14-08-2023, 11:28:55
    #8
    <?php
    $stringValue = "300.5000";
    $integerValue = (int) str_replace('.', '', $stringValue);
    
    echo $integerValue; // 3005000
    ?>
    Zaten integer olan bir değer'de nokta (.) kullanamassınız.
    --Ekleme
    Float olan bir değerde de sıfırlara müdahale edemezsiniz. PHP matematiksel olarak düşündüğü ve işlem yapması gerektiği için her türlü sıfır silinir. Kodunuzu inceleyip kütüphaneler eklemeler kaçak yöntemler kullanabilir. Tüm kodu görmeden net cevap vermemekle beraber PHP olarak düşündüğümüzde dediğiniz yöntemi yapmak zorlama olur biraz.
  • 14-08-2023, 11:31:24
    #9
    Alkoz adlı üyeden alıntı: mesajı görüntüle
    <?php
    $stringValue = "300.5000";
    $integerValue = (int) str_replace('.', '', $stringValue);
    
    echo $integerValue; // 3005000
    ?>
    Zaten integer olan bir değer'de nokta (.) kullanamassınız noktayı kaldırıp değerinizi integer yapmanız yeterli olacak.
    .