• 04-07-2023, 14:55:44
    #1
    Çoğu kişi para formatında sorun yaşamaktadır. Kendimin de kullandığı basit ve kullanışlı para birimleri için fonksiyonu sizler ile paylaşacağım.

    Özellikleri:
    • 0.000....... -> 0.'dan sonra sonsuz 0'ı destekler
    • 0.000...... -> 0.'dan sonra 15 0'a kadar rakamları düzgün bir şekilde yazdırır
    • Rakamın sonunda oluşan çift 0'ı otomatik siler
    <?php
    function moneyFormat($number)
    {
        if (0.0000000009 >= $number) {
            $l = number_format($number, 15, ".", ",");
            $l = strpos($l, '.') !== false ? rtrim(rtrim($l, '0'), '.') : $l;
            return $l;
        } elseif (0.000000001 < $number && 0.000000009 > $number) {
            $l = number_format($number, 12, ".", ",");
            $l = strpos($l, '.') !== false ? rtrim(rtrim($l, '0'), '.') : $l;
            return $l;
        } elseif (0.00000001 < $number && 0.00000009 > $number) {
            $l = number_format($number, 11, ".", ",");
            $l = strpos($l, '.') !== false ? rtrim(rtrim($l, '0'), '.') : $l;
            return $l;
        } elseif (0.0000001 < $number && 0.0000009 > $number) {
            $l = number_format($number, 10, ".", ",");
            $l = strpos($l, '.') !== false ? rtrim(rtrim($l, '0'), '.') : $l;
            return $l;
        } elseif (0.000001 < $number && 0.000009 > $number) {
            $l = number_format($number, 9, ".", ",");
            $l = strpos($l, '.') !== false ? rtrim(rtrim($l, '0'), '.') : $l;
            return $l;
        } elseif (0.00001 < $number && 0.00009 > $number) {
            $l = number_format($number, 8, ".", ",");
            $l = strpos($l, '.') !== false ? rtrim(rtrim($l, '0'), '.') : $l;
            return $l;
        } elseif (0.0001 < $number && 0.0009 > $number) {
            $l = number_format($number, 7, ".", ",");
            $l = strpos($l, '.') !== false ? rtrim(rtrim($l, '0'), '.') : $l;
            return $l;
        } elseif (0.001 < $number && 0.009 > $number) {
            $l = number_format($number, 6, ".", ",");
            $l = strpos($l, '.') !== false ? rtrim(rtrim($l, '0'), '.') : $l;
            return $l;
        } elseif (0.01 < $number && 0.09 > $number) {
            $l = number_format($number, 4, ".", ",");
            $l = strpos($l, '.') !== false ? rtrim(rtrim($l, '0'), '.') : $l;
            return $l;
        } elseif (0.1 < $number && 0.9 > $number) {
            $l = number_format($number, 2, ".", ",");
            $l = strpos($l, '.') !== false ? rtrim(rtrim($l, '0'), '.') : $l;
            return $l;
        } else {
            $l = number_format($number, 2, ".", ",");
            $l = strpos($l, '.') !== false ? rtrim(rtrim($l, '0'), '.') : $l;
            return $l;
        }
    }
    
    $fiyat = 89000789.89787540000;
    echo moneyFormat($fiyat); // çıktı: 89,000,789.90 -> noktadan sonra çift sıfır oluşursa otomatik silenecektir
    ?>
    Not: Bu fonksiyon bol sıfırlı işlemler yapanlar için idealdir. Diğer yöntemlerin çoğu 0.00.......'dan sonra bol sıfırı desteklemez ve genellikle çıktı olarak 0.00 verir. Bu nedenle bu fonksiyon bol sıfırlı işlemler veya diğer işlemler için uygundur.
  • 04-07-2023, 15:08:21
    #2
    Üyeliği durduruldu
    function moneyFormat($number)
    {
        $decimalPlaces = 2;
    
        if ($number < 1) {
            $decimalPlaces = max($decimalPlaces, 4);
        } elseif ($number < 100) {
            $decimalPlaces = max($decimalPlaces, 2);
        }
    
        $formattedNumber = number_format($number, $decimalPlaces, ".", ",");
        $formattedNumber = strpos($formattedNumber, '.') !== false ? rtrim(rtrim($formattedNumber, '0'), '.') : $formattedNumber;
    
        return $formattedNumber;
    }
    
    $fiyat = 89000789.89787540000;
    echo moneyFormat($fiyat);
    merhaba. daha kısa ve okunabilir hale getirdim.
  • 04-07-2023, 15:09:25
    #3
    Harika bir paylaşım
    • AppsTRDesign
    AppsTRDesign bunu beğendi.
    1 kişi bunu beğendi.
  • 04-07-2023, 16:38:08
    #4
    vido adlı üyeden alıntı: mesajı görüntüle
    function moneyFormat($number)
    {
        $decimalPlaces = 2;
    
        if ($number < 1) {
            $decimalPlaces = max($decimalPlaces, 4);
        } elseif ($number < 100) {
            $decimalPlaces = max($decimalPlaces, 2);
        }
    
        $formattedNumber = number_format($number, $decimalPlaces, ".", ",");
        $formattedNumber = strpos($formattedNumber, '.') !== false ? rtrim(rtrim($formattedNumber, '0'), '.') : $formattedNumber;
    
        return $formattedNumber;
    }
    
    $fiyat = 89000789.89787540000;
    echo moneyFormat($fiyat);
    merhaba. daha kısa ve okunabilir hale getirdim.
    Elinize sağlık üstad. Güzel bir düzenleme olmuş. Lakin şöyle bir sorun var. Sayı 0.00000007878000 gibi olunca çıktı "0" oluyor. zaten bu formatı yapmamdaki en büyük etken bu tür bol sıfırlı sayıları doğru olarak çıktısını almaktı. yoksa daha basit yöntemler var lakin onlar da 0.00 olarak çıktı veriyor ve doğru çalışmıyor.

    Misafir adlı üyeden alıntı: mesajı görüntüle
    Harika bir paylaşım
    Teşekkür ederim güzel düşünceler için
  • 05-07-2023, 14:23:11
    #5
    Ellerinize sağlık, aşağıdaki kütüphane de çok faydalıdır, ben kullanıyorum ve memnunum. ISO 4217 listesindeki tüm para birimlerini destekler: https://en.wikipedia.org/wiki/ISO_4217, ayrıca bir çok kriptoyu da destekler.

    https://www.moneyphp.org/en/stable/getting-started.html
  • 05-07-2023, 23:18:03
    #6
    fatihemre adlı üyeden alıntı: mesajı görüntüle
    Ellerinize sağlık, aşağıdaki kütüphane de çok faydalıdır, ben kullanıyorum ve memnunum. ISO 4217 listesindeki tüm para birimlerini destekler: https://en.wikipedia.org/wiki/ISO_4217, ayrıca bir çok kriptoyu da destekler.

    https://www.moneyphp.org/en/stable/getting-started.html
    Teşekkür ederim Fatih bey. Güzel bir kütüphane. Listeme ekledim.
  • 13-07-2023, 01:09:41
    #7
    Hocam bunun için zaten php class'ı mevcuttur. sayıyı istediğiniz herhangi bir ülkenin para birimi formatına çevirir ve yanına o ülkenin para birim simgesini ekler.
    https://www.php.net/manual/en/number...atcurrency.php
    https://www.php.net/manual/en/class.numberformatter.php

    $formatter = new NumberFormatter('en_US', NumberFormatter::CURRENCY);
    $toplammoney=$formatter->formatCurrency(($viewsayisi * 3 /1000), 'USD');
    echo "$toplammoney";
    
    /* çıktı: 10$ */
    gibi...
  • 13-07-2023, 03:56:19
    #8
    Protex adlı üyeden alıntı: mesajı görüntüle
    Hocam bunun için zaten php class'ı mevcuttur. sayıyı istediğiniz herhangi bir ülkenin para birimi formatına çevirir ve yanına o ülkenin para birim simgesini ekler.
    https://www.php.net/manual/en/number...atcurrency.php
    https://www.php.net/manual/en/class.numberformatter.php

    $formatter = new NumberFormatter('en_US', NumberFormatter::CURRENCY);
    $toplammoney=$formatter->formatCurrency(($viewsayisi * 3 /1000), 'USD');
    echo "$toplammoney";
    
    /* çıktı: 10$ */
    gibi...
    Bunu biliyorum ama işe yaramıyor. 0.00000000....754 gibi rakamlarda 0.0 TL gösteriyor o nedenle kullanmıyorum. Decimal sayısını artırdığımda 0.00000000...75000000001 bu şekilde saçma sapan oluyor o nedenle bu benim formatı geliştirdim.