Home > php教程 > php手册 > body text

Convert RMB value to Chinese capital letters

WBOY
Release: 2016-07-06 13:31:00
Original
1879 people have browsed it

class Num2RmbClass{ /* * * Convert RMB value to Chinese uppercase * @author SunsCheung * @time 2015.11.11 * @param string $number The default value is 0 * @param string $int_unit Currency unit, default is "yuan", Some requirements may be "round" * @param bool $is_round whether to round decimals*

<span style="color: #0000ff;">class</span><span style="color: #000000;"> Num2RmbClass{
    </span><span style="color: #008000;">/*</span><span style="color: #008000;">*
     * 人民币数值转中文大写
     * @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
     </span><span style="color: #008000;">*/</span>
    <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">function</span> num2rmb(<span style="color: #800080;">$number</span> = 0, <span style="color: #800080;">$int_unit</span> = '元', <span style="color: #800080;">$is_round</span> = <span style="color: #0000ff;">TRUE</span>, <span style="color: #800080;">$is_extra_zero</span> = <span style="color: #0000ff;">FALSE</span>, <span style="color: #800080;">$dec_to_int</span> = <span style="color: #0000ff;">FALSE</span><span style="color: #000000;">) {
        </span><span style="color: #008000;">//</span><span style="color: #008000;"> 将数字切分成两段</span>
        <span style="color: #800080;">$parts</span> = <span style="color: #008080;">explode</span>('.', <span style="color: #800080;">$number</span>, 2<span style="color: #000000;">);
        </span><span style="color: #800080;">$int</span> = <span style="color: #0000ff;">isset</span>(<span style="color: #800080;">$parts</span>[0]) ? <span style="color: #008080;">strval</span>(<span style="color: #800080;">$parts</span>[0]) : '0'<span style="color: #000000;">;
        </span><span style="color: #800080;">$dec</span> = <span style="color: #0000ff;">isset</span>(<span style="color: #800080;">$parts</span>[1]) ? <span style="color: #008080;">strval</span>(<span style="color: #800080;">$parts</span>[1]) : ''<span style="color: #000000;">;
        </span><span style="color: #008000;">//</span><span style="color: #008000;"> 如果小数点后多于2位,不四舍五入就直接截,否则就处理</span>
        <span style="color: #800080;">$dec_len</span> = <span style="color: #008080;">strlen</span>(<span style="color: #800080;">$dec</span><span style="color: #000000;">);
        </span><span style="color: #0000ff;">if</span> (<span style="color: #0000ff;">isset</span>(<span style="color: #800080;">$parts</span>[1]) && <span style="color: #800080;">$dec_len</span> > 2<span style="color: #000000;">) {
            </span><span style="color: #0000ff;">if</span>(<span style="color: #800080;">$is_round</span><span style="color: #000000;">){
                </span><span style="color: #0000ff;">if</span>(<span style="color: #008080;">round</span>(<span style="color: #008080;">floatval</span>("0.".<span style="color: #800080;">$dec</span>), 2) == 1 && <span style="color: #800080;">$dec_to_int</span>){<span style="color: #008000;">//</span><span style="color: #008000;">小数进位到个位</span>
                    <span style="color: #800080;">$int</span> = <span style="color: #0000ff;">empty</span>(<span style="color: #800080;">$int</span>)?1: <span style="color: #008080;">strval</span>(<span style="color: #800080;">$parts</span>[0]+1<span style="color: #000000;">);
                    </span><span style="color: #800080;">$dec</span> = 0<span style="color: #000000;">;
                }</span><span style="color: #0000ff;">elseif</span>(<span style="color: #008080;">round</span>(<span style="color: #008080;">floatval</span>("0.".<span style="color: #800080;">$dec</span>), 2) == 1){<span style="color: #008000;">//</span><span style="color: #008000;">小数不进位到个位</span>
                    <span style="color: #800080;">$dec</span> = "99"<span style="color: #000000;">;
                }</span><span style="color: #0000ff;">else</span><span style="color: #000000;">{
                    </span><span style="color: #800080;">$dec</span> = <span style="color: #008080;">substr</span>(<span style="color: #008080;">strrchr</span>(<span style="color: #008080;">strval</span>(<span style="color: #008080;">round</span>(<span style="color: #008080;">floatval</span>("0.".<span style="color: #800080;">$dec</span>), 2)), '.'), 1<span style="color: #000000;">);
                    </span><span style="color: #0000ff;">echo</span> <span style="color: #800080;">$dec</span>;<span style="color: #0000ff;">die</span>('boss'<span style="color: #000000;">);
                }
            }</span><span style="color: #0000ff;">else</span><span style="color: #000000;">{
                </span><span style="color: #800080;">$dec</span> = <span style="color: #008080;">substr</span>(<span style="color: #800080;">$parts</span>[1], 0, 2<span style="color: #000000;">);
            }
        }
        </span><span style="color: #008000;">//</span><span style="color: #008000;"> 当number为0.001时,小数点后的金额为0元</span>
        <span style="color: #0000ff;">if</span> (<span style="color: #0000ff;">empty</span>(<span style="color: #800080;">$int</span>) && <span style="color: #0000ff;">empty</span>(<span style="color: #800080;">$dec</span><span style="color: #000000;">)) {
            </span><span style="color: #0000ff;">return</span> '零'<span style="color: #000000;">;
        }

        </span><span style="color: #008000;">//</span><span style="color: #008000;"> 定义</span>
        <span style="color: #800080;">$chs</span> = <span style="color: #0000ff;">array</span>('0','壹','贰','叁','肆','伍','陆','柒','捌','玖'<span style="color: #000000;">);
        </span><span style="color: #800080;">$uni</span> = <span style="color: #0000ff;">array</span>('','拾','佰','仟'<span style="color: #000000;">);
        </span><span style="color: #800080;">$dec_uni</span> = <span style="color: #0000ff;">array</span>('角', '分'<span style="color: #000000;">);
        </span><span style="color: #800080;">$exp</span> = <span style="color: #0000ff;">array</span>('', '万'<span style="color: #000000;">);
        </span><span style="color: #800080;">$res</span> = ''<span style="color: #000000;">;

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

        </span><span style="color: #008000;">//</span><span style="color: #008000;"> 如果小数部分处理完之后是00,需要处理下</span>
        <span style="color: #800080;">$dec</span> = <span style="color: #008080;">rtrim</span>(<span style="color: #800080;">$dec</span>, '0'<span style="color: #000000;">);

        </span><span style="color: #008000;">//</span><span style="color: #008000;"> 小数部分从左向右找</span>
        <span style="color: #0000ff;">if</span> (!<span style="color: #0000ff;">empty</span>(<span style="color: #800080;">$dec</span><span style="color: #000000;">)) {
            </span><span style="color: #800080;">$res</span> .= <span style="color: #800080;">$int_unit</span><span style="color: #000000;">;
            </span><span style="color: #008000;">//</span><span style="color: #008000;"> 是否要在整数部分以0结尾的数字后附加0,有的系统有这要求</span>
            <span style="color: #0000ff;">if</span> (<span style="color: #800080;">$is_extra_zero</span><span style="color: #000000;">) {
                </span><span style="color: #0000ff;">if</span> (<span style="color: #008080;">substr</span>(<span style="color: #800080;">$int</span>, -1) === '0'<span style="color: #000000;">) {
                    </span><span style="color: #800080;">$res</span>.= '零'<span style="color: #000000;">;
                }
            }
            </span><span style="color: #0000ff;">for</span> (<span style="color: #800080;">$i</span> = 0, <span style="color: #800080;">$cnt</span> = <span style="color: #008080;">strlen</span>(<span style="color: #800080;">$dec</span>); <span style="color: #800080;">$i</span> < <span style="color: #800080;">$cnt</span>; <span style="color: #800080;">$i</span>++<span style="color: #000000;">) {
                </span><span style="color: #800080;">$u</span> = <span style="color: #800080;">$dec</span>{<span style="color: #800080;">$i</span>} > 0 ? <span style="color: #800080;">$dec_uni</span>[<span style="color: #800080;">$i</span>] : ''; <span style="color: #008000;">//</span><span style="color: #008000;"> 非0的数字后面添加单位</span>
                <span style="color: #800080;">$res</span> .= <span style="color: #800080;">$chs</span>[<span style="color: #800080;">$dec</span>{<span style="color: #800080;">$i</span>}] . <span style="color: #800080;">$u</span><span style="color: #000000;">;
            }
            </span><span style="color: #800080;">$res</span> = <span style="color: #008080;">rtrim</span>(<span style="color: #800080;">$res</span>, '0');<span style="color: #008000;">//</span><span style="color: #008000;"> 去掉末尾的0</span>
            <span style="color: #800080;">$res</span> = <span style="color: #008080;">preg_replace</span>("/0+/", "零", <span style="color: #800080;">$res</span>); <span style="color: #008000;">//</span><span style="color: #008000;"> 替换多个连续的0</span>
        } <span style="color: #0000ff;">else</span><span style="color: #000000;"> {
            </span><span style="color: #800080;">$res</span> .= <span style="color: #800080;">$int_unit</span> . '整'<span style="color: #000000;">;
        }
        </span><span style="color: #0000ff;">return</span>  <span style="color: #800080;">$number</span> < 0 ? "(负)".<span style="color: #800080;">$res</span> : <span style="color: #800080;">$res</span><span style="color: #000000;">;
    }

}
</span><span style="color: #008000;">//</span><span style="color: #008000;">$a = new Num2RmbClass;</span>
<span style="color: #0000ff;">echo</span> (Num2RmbClass::num2rmb('1600020039.9989','圆',<span style="color: #0000ff;">false</span>,<span style="color: #0000ff;">false</span>,<span style="color: #0000ff;">false</span>));<span style="color: #008000;">//</span><span style="color: #008000;">壹佰贰拾叁圆肆角伍分</span>
Copy after login


source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Recommendations
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template