【问题标题】:How to convert amount in crores to decimal value in php?如何在 php 中将数千万的金额转换为十进制值?
【发布时间】:2016-01-10 18:48:12
【问题描述】:

我的产品价格是 5005000 卢比/-(500 万卢比和 5000 卢比)。我想转换为 505 万。是否有任何 PHP 函数可以做到这一点。我尝试搜索 StackOverflow 并仅获得 number_words 转换。在一个名为 99 英亩的地方,他们这样做是这样的:http://www.99acres.com/Bangalore-Real-Estate.htm。谁能帮忙

【问题讨论】:

  • 我认为应该是50.05 而不是50.5
  • 是的。我希望你们都明白逻辑。
  • Rs 5005000/- 将显示为 500.5 万,而不是 505 万
  • 您是否只关心十万,如果是千万或数千,应该如何处理
  • 是的。 5050000 为 50.5 lacs,5005000 为 50.05 lacs。

标签: php number-formatting


【解决方案1】:
    <?php
function count_digit($number) {
  return strlen($number);
}

function divider($number_of_digits) {
    $tens="1";

  if($number_of_digits>8)
    return 10000000;

  while(($number_of_digits-1)>0)
  {
    $tens.="0";
    $number_of_digits--;
  }
  return $tens;
}
//function call
$num = "789";
$ext="";//thousand,lac, crore
$number_of_digits = count_digit($num); //this is call :)
    if($number_of_digits>3)
{
    if($number_of_digits%2!=0)
        $divider=divider($number_of_digits-1);
    else
        $divider=divider($number_of_digits);
}
else
    $divider=1;

$fraction=$num/$divider;
$fraction=number_format($fraction,2);
if($number_of_digits==4 ||$number_of_digits==5)
    $ext="k";
if($number_of_digits==6 ||$number_of_digits==7)
    $ext="Lac";
if($number_of_digits==8 ||$number_of_digits==9)
    $ext="Cr";
echo $fraction." ".$ext;
?>
  1. 数一下number_of_digit
  2. 取(number_of_digit-1)个十位值
  3. 分开吧。
  4. 从位数中找到值的扩展。
  5. 输出将是

123456789 = 12.34 铬

23456789 = 2.34 铬

3456789 = 34.56 乳糖

456789 = 4.56 乳糖

56789 = 56.78 K

6789 = 6.78 K

如果任何测试用例失败。请告诉我。我会改正的

【讨论】:

  • 对于 24500000 即 2 千万和 45 lacs,结果为 24.50。
  • 我编辑了我的代码,请再次检查...您可以在下面看到更新的代码输出
  • 是的,这是正确的答案。即使需要很小的正确性,例如如果金额是 24505000 应该给出 2.4505 cr,但即使这样也被忽略了。
  • 如何使用 mysqli php 在重复区域上使用它。我放置在重复区域内,然后由于无法使用先前声明的函数而出现错误。所以我用:if (!function_exists('count_digit')) { -- your codes -- } 现在只显示第一条记录的结果。仅供参考,我已将其放置在重复区域内。
  • @RohanKhude 请帮忙。请看上面的评论。
【解决方案2】:

你也可以试试我的代码,也许对你有帮助:

      function no_to_words($no)
{
    if($no == 0) {
        return ' ';

    }else {
        $n =  strlen($no); // 7
        switch ($n) {
            case 3:
                $val = $no/100;
                $val = round($val, 2);
                $finalval =  $val ." hundred";
                break;
            case 4:
                $val = $no/1000;
                $val = round($val, 2);
                $finalval =  $val ." thousand";
                break;
            case 5:
                $val = $no/1000;
                $val = round($val, 2);
                $finalval =  $val ." thousand";
                break;
            case 6:
                $val = $no/100000;
                $val = round($val, 2);
                $finalval =  $val ." lakh";
                break;
            case 7:
                $val = $no/100000;
                $val = round($val, 2);
                $finalval =  $val ." lakh";
                break;
            case 8:
                $val = $no/10000000;
                $val = round($val, 2);
                $finalval =  $val ." crore";
                break;
            case 9:
                $val = $no/10000000;
                $val = round($val, 2);
                $finalval =  $val ." crore";
                break;

            default:
                echo "";
        }
        return $finalval;

    }
}

echo no_to_words(12345676);

您可以根据需要修改功能。

【讨论】:

  • 输入 - 123456789 输出 - 12.3456789 千万等
【解决方案3】:

只要找到输入数字的长度,根据长度(千万或十万)除,将数字四舍五入到 2 位,然后加上数字的扩展名。

function convertCurrency($number)
{
    // Convert Price to Crores or Lakhs or Thousands
    $length = strlen($number);
    $currency = '';

    if($length == 4 || $length == 5)
    {
        // Thousand
        $number = $number / 1000;
        $number = round($number,2);
        $ext = "Thousand";
        $currency = $number." ".$ext;
    }
    elseif($length == 6 || $length == 7)
    {
        // Lakhs
        $number = $number / 100000;
        $number = round($number,2);
        $ext = "Lac";
        $currency = $number." ".$ext;

    }
    elseif($length == 8 || $length == 9)
    {
        // Crores
        $number = $number / 10000000;
        $number = round($number,2);
        $ext = "Cr";
        $currency = $number.' '.$ext;
    }

    return $currency;
}

// Call the function with a number input 
convertCurrency(100000);

简洁明了。 :) (如果任何测试用例失败,请告诉我。我会修复它)

【讨论】:

    【解决方案4】:
    function convert_rupee($amount){
        $length = strlen($amount);
        if($length>=6 && $length <=7){
            echo round($amount/100000,2).' Lac(s)';
        }else if($length>=8 && $length <=9){
            echo round($amount/10000000,2).' Cr.';
        }else if($length>=4 && $length <=5){
            echo round($amount/1000,2).' K';
    
        }else{ echo 0;}
    }
    

    【讨论】:

      【解决方案5】:

      试试这个对你有帮助,

       function cnvCrtoDec($number) {
           $unitArray =   array("4"=>"K","5"=>"K","6"=>"L","7"=>"L","8"=>"Cr","9"=>"Cr");
           $numLen        = strlen($number);
           if ($numLen > 3 ) {
              foreach ($unitArray as $nmLen=>$unit) {
                  if ($numLen == $nmLen) {
                     if ($nmLen % 2 == 0) {
                        $remNumber    = substr($number,1,3);
                        $ckNmGtZer    = ($remNumber[0]+$remNumber[1]+$remNumber[2]);
                        if ($ckNmGtZer < 1) { 
                            $remNumber    = "";
                        } else {
                           if ( ($remNumber[1]    == 0) && ($remNumber[2] == 0)   ) {
                              $remNumber[1]   = "";
                              $remNumber[2]   = "";   
                        } 
                   }
                   echo $number   = substr($number,0,$numLen-$nmLen+1) . "." .  $remNumber . "$unit";             
          } else {
               $remNumber     = substr($number,2,3);
               $ckNmGtZer = ($remNumber[0]+$remNumber[1]+$remNumber[2]);
               if ($ckNmGtZer < 1) { 
                  $remNumber  = 0;
              } else {
                  if (($remNumber[1]  == 0) && ($remNumber[2] == 0)) {
                      $remNumber[1]   = "";
                      $remNumber[2]   = "";   
                  }   
              }
              echo $number    = substr($number,0,$numLen-$nmLen+2) . ".". $remNumber . "$unit";   
             }
           }
       }
       } else {
          echo $number . "Rs";    
       }
       }
      
       cnvCrtoDec($number     = "155005");
      

      【讨论】:

        【解决方案6】:

        以下是 Swift 方法,在 PHP 中转换后可能会很有用 并且可能是其他人发现它对相同的答案使用完整查找,并且如果您只想要没有货币符号的格式数字,以下代码可能很有用

        SWIFT 4

        static func convertToCurrency(value: Double) -> String {
            var shortAmt = value
            var suf = ""
        
            if (value >= 10000000.0) {
                suf = " C"
                shortAmt /= 10000000.0
            } else if (value >= 1000000.0) {
                suf = " M";
                shortAmt /= 1000000.0;
            } else if (value >= 100000.0) {
                suf = " L"
                shortAmt /= 100000.0
            } else if (value >= 1000.0) {
                suf = " K"
                shortAmt /= 1000.0
            }
        
            let numberFormatter = NumberFormatter()
            numberFormatter.numberStyle = .currency
            numberFormatter.maximumFractionDigits = 2
            numberFormatter.locale = Locale(identifier: "en-IN") // Define your currency symbol type
            //numberFormatter.currencySymbol = ""   //Add this line if you don't want to add currency symbol
            let amtAsStr = numberFormatter.string(from: shortAmt as NSNumber)
        
            return "\(amtAsStr ?? "")\(suf)"
        }
        

        【讨论】:

          猜你喜欢
          • 2017-04-20
          • 1970-01-01
          • 2019-07-20
          • 1970-01-01
          • 2023-01-16
          • 1970-01-01
          • 2015-03-13
          • 2015-06-25
          • 1970-01-01
          相关资源
          最近更新 更多