検索
ホームページバックエンド開発PHPチュートリアルPHPでカプセル化されたRMB値を中国語の大文字に変換します

PHP でカプセル化された RMB 値を中国語の大文字に変換します

class Num2RmbClass{
  /**
   * 人民币数值转中文大写
   * @author SunsCheung
   * @time 2015.11.11
   * @param string $number 数值 默认为0
   * @param string $int_unit 币种单位,默认"元",有的需求可能为"圆"
   * @param bool $is_round 是否对小数进行四舍五入
   * @param bool $is_extra_zero 是否对整数部分以0结尾,小数存在的数字附加0,比如1960.30,
   *       有的系统要求输出"壹仟玖佰陆拾元零叁角",实际上"壹仟玖佰陆拾元叁角"也是对的
   * @param bool $dec_to_int 是否对让小数部分进位到个位,如果进位,个位加1,小数为0,
   * @return string
   */
  public static function num2rmb($number = 0, $int_unit = '元', $is_round = TRUE, $is_extra_zero = FALSE, $dec_to_int = FALSE) {
    // 将数字切分成两段
    $parts = explode('.', $number, 2);
    $int = isset($parts[0]) ? strval($parts[0]) : '0';
    $dec = isset($parts[1]) ? strval($parts[1]) : '';
    // 如果小数点后多于2位,不四舍五入就直接截,否则就处理
    $dec_len = strlen($dec);
    if (isset($parts[1]) && $dec_len > 2) {
      if($is_round){
        if(round(floatval("0.".$dec), 2) == 1 && $dec_to_int){//小数进位到个位
          $int = empty($int)?1: strval($parts[0]+1);
          $dec = 0;
        }elseif(round(floatval("0.".$dec), 2) == 1){//小数不进位到个位
          $dec = "99";
        }else{
          $dec = substr(strrchr(strval(round(floatval("0.".$dec), 2)), '.'), 1);
          echo $dec;die('boss');
        }
      }else{
        $dec = substr($parts[1], 0, 2);
      }
    }
    // 当number为0.001时,小数点后的金额为0元
    if (empty($int) && empty($dec)) {
      return '零';
    }

    // 定义
    $chs = array('0','壹','贰','叁','肆','伍','陆','柒','捌','玖');
    $uni = array('','拾','佰','仟');
    $dec_uni = array('角', '分');
    $exp = array('', '万');
    $res = '';

    // 整数部分从右向左找
    for ($i = strlen($int) - 1, $k = 0; $i >= 0; $k++) {
      $str = '';
      // 按照中文读写习惯,每4个字为一段进行转化,i一直在减
      for ($j = 0; $j = 0; $j++, $i--) {
        $u = $int{$i} > 0 ? $uni[$j] : ''; // 非0的数字后面添加单位
        $str = $chs[$int{$i}] . $u . $str;
      }
      //echo $str."|".($k - 2)."<br>";
      $str = rtrim($str, '0');// 去掉末尾的0
      $str = preg_replace("/0+/", "零", $str); // 替换多个连续的0
      if (!isset($exp[$k])) {
        $exp[$k] = $exp[$k - 2] . '亿'; // 构建单位
      }
      $u2 = $str != '' ? $exp[$k] : '';
      $res = $str . $u2 . $res;
    }

    // 如果小数部分处理完之后是00,需要处理下
    $dec = rtrim($dec, '0');

    // 小数部分从左向右找
    if (!empty($dec)) {
      $res .= $int_unit;
      // 是否要在整数部分以0结尾的数字后附加0,有的系统有这要求
      if ($is_extra_zero) {
        if (substr($int, -1) === '0') {
          $res.= '零';
        }
      }
      for ($i = 0, $cnt = strlen($dec); $i  0 ? $dec_uni[$i] : ''; // 非0的数字后面添加单位
        $res .= $chs[$dec{$i}] . $u;
      }
      $res = rtrim($res, '0');// 去掉末尾的0
      $res = preg_replace("/0+/", "零", $res); // 替换多个连续的0
    } else {
      $res .= $int_unit . '整';
    }
    return $number <p>使い方<br></p><p></p><pre class="brush:php;toolbar:false">//$a = new Num2RmbClass;
echo (Num2RmbClass::num2rmb('1600020039.9989','圆',false,false,false));

もっと簡単な方法を共有しましょう

function cny($ns) 
{
static $cnums = array("零","壹","贰","叁","肆","伍","陆","柒","捌","玖"), 
$cnyunits = array("圆","角","分"), 
$grees = array("拾","佰","仟","万","拾","佰","仟","亿"); 
list($ns1,$ns2) = explode(".",$ns,2); 
$ns2 = array_filter(array($ns2[1],$ns2[0])); 
$ret = array_merge($ns2,array(implode("", _cny_map_unit(str_split($ns1), $grees)), "")); 
$ret = implode("",array_reverse(_cny_map_unit($ret,$cnyunits))); 
return str_replace(array_keys($cnums), $cnums,$ret); 
}

function _cny_map_unit($list,$units) 
{ 
$ul = count($units); 
$xs = array(); 
foreach (array_reverse($list) as $x) 
{ 
$l = count($xs); 
if($x!="0" || !($l%4)) 
{
$n=($x=='0'?'':$x).($units[($l-1)%$ul]); 
}
else
{
$n=is_numeric($xs[0][0]) ? $x : ''; 
}
array_unshift($xs, $n); 
} 
return $xs; 
}

$value='23058.04';
print cny($value);echo'
';

输出:贰万叁仟零伍拾捌圆肆角

別のネチズンが良い仕事をしてくれました

/**
*数字金额转换成中文大写金额的函数
*String Int $num 要转换的小写数字或小写字符串
*return 大写字母
*小数位为两位
**/
function num_to_rmb($num){
    $c1 = "零壹贰叁肆伍陆柒捌玖";
    $c2 = "分角元拾佰仟万拾佰仟亿";
    //精确到分后面就不要了,所以只留两个小数位
    $num = round($num, 2); 
    //将数字转化为整数
    $num = $num * 100;
    if (strlen($num) > 10) {
        return "金额太大,请检查";
    } 
    $i = 0;
    $c = "";
    while (1) {
        if ($i == 0) {
            //获取最后一位数字
            $n = substr($num, strlen($num)-1, 1);
        } else {
            $n = $num % 10;
        }
        //每次将最后一位数字转化为中文
        $p1 = substr($c1, 3 * $n, 3);
        $p2 = substr($c2, 3 * $i, 3);
        if ($n != '0' || ($n == '0' && ($p2 == '亿' || $p2 == '万' || $p2 == '元'))) {
            $c = $p1 . $p2 . $c;
        } else {
            $c = $p1 . $c;
        }
        $i = $i + 1;
        //去掉数字最后一位了
        $num = $num / 10;
        $num = (int)$num;
        //结束循环
        if ($num == 0) {
            break;
        } 
    }
    $j = 0;
    $slen = strlen($c);
    while ($j  
                
                
                <p>
                    上記は、PHP でカプセル化された RMB 値を中国語の大文字に変換する方法を、その内容も含めて紹介しました。PHP チュートリアルに興味のある友人に役立つことを願っています。 </p>
                <p>
                    </p>
声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
PHP中int类型转换为字节的方法详解PHP中int类型转换为字节的方法详解Mar 06, 2024 pm 06:18 PM

PHP中int类型转换为字节的方法详解在PHP中,我们经常需要将整数类型(int)转换为字节(Byte)类型,比如在处理网络数据传输、文件处理或者加密算法等场景中。本文将详细介绍如何将int类型转换为字节类型,以及提供具体的代码示例。1.int类型与字节的关系在计算机领域,基本数据类型int表示整数,而字节(Byte)是计算机存储单位,通常是8位二进制数据

C++程序将double类型的变量转换为int类型C++程序将double类型的变量转换为int类型Aug 25, 2023 pm 08:25 PM

在C++中,int类型的变量只能保存正整数或负整数值;它们不能保存小数值。有float和double值可用于此目的。为了存储小数点后最多七位的小数,创建了双精度数据类型。整数到双精度数据类型的转换可以由编译器自动完成(称为“隐式”转换),也可以由程序员向编译器显式请求(称为“显式”转换)。在接下来的部分中,我们将介绍各种转换方法。隐式转换编译器自动执行隐式类型转换。要实现这一点,需要两个变量——一个是浮点类型,另一个是整数类型。当我们简单地将浮点值或变量分配给整数变量时,编译器将处理所有其他事情

使用C#中的Array.Sort函数对数组进行排序使用C#中的Array.Sort函数对数组进行排序Nov 18, 2023 am 10:37 AM

标题:C#中使用Array.Sort函数对数组进行排序的示例正文:在C#中,数组是一种常用的数据结构,经常需要对数组进行排序操作。C#提供了Array类,其中有Sort方法可以方便地对数组进行排序。本文将演示如何使用C#中的Array.Sort函数对数组进行排序,并提供具体的代码示例。首先,我们需要了解一下Array.Sort函数的基本用法。Array.So

int32的取值范围是多少int32的取值范围是多少Aug 11, 2023 pm 02:53 PM

int32的取值范围是从-2的31次方到2的31次方减1,即-2147483648到2147483647。int32是有符号的整数类型,意味着它可以表示正数、负数和零,它使用1位来表示符号位,而剩余的31位用来表示数值。由于一位被用来表示符号位,所以int32的有效位数是31位。

java int 是几位java int 是几位Mar 06, 2023 pm 04:09 PM

在java中,int是32位有符号数据类型,其变量需要32位内存;int数据类型的有效范围为-2147483648至2147483647,此范围中的所有整数称为整数字面量。一个整数字面量可以分配给一个int变量,例如“int num1 = 21;”。

int占几个字节int占几个字节Jan 22, 2024 pm 03:14 PM

int类型在不同编程语言和不同硬件平台下所占用的字节数可能会有所不同。详细介绍:1、在C语言中,int类型通常占用2个字节或4个字节。在32位系统中,int类型占用4个字节,而在16位系统中,int类型占用2个字节。在64位系统中,int类型可能占用8个字节;2、在Java中,int类型通常占用4个字节,而在Python中,int类型没有字节数限制,可以自动调整等等。

简单明了的PHP array_merge_recursive()函数使用方法简单明了的PHP array_merge_recursive()函数使用方法Jun 27, 2023 pm 01:48 PM

在进行PHP编程时,我们常常需要对数组进行合并。PHP提供了array_merge()函数来完成数组合并的工作,不过当数组中存在相同的键时,该函数会覆盖原有的值。为了解决这个问题,PHP在语言中还提供了一个array_merge_recursive()函数,该函数可以合并数组并保留相同键的值,使得程序的设计变得更加灵活。array_merge

如何将string转换为int类型如何将string转换为int类型Aug 02, 2023 am 10:59 AM

将string转换为int类型的方法:1、使用内置函数int();2、使用try-except处理异常;3、使用正则表达式。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン