Php 把数字分解成千、百等
我目前正在为我的公司准备支票打印解决方案。打印支票时,您需要打印支付金额的百万、十万、一万、千、百、十和单位(英镑/美元/欧元等) 在111232.23的情况下,以下是我在下面编写的代码的正确输出。我不禁感到有一种更有效、更可靠的方法可以做到这一点?有人知道图书馆/班级的数学技术可以做到这一点吗Php 把数字分解成千、百等,php,math,currency,Php,Math,Currency,我目前正在为我的公司准备支票打印解决方案。打印支票时,您需要打印支付金额的百万、十万、一万、千、百、十和单位(英镑/美元/欧元等) 在111232.23的情况下,以下是我在下面编写的代码的正确输出。我不禁感到有一种更有效、更可靠的方法可以做到这一点?有人知道图书馆/班级的数学技术可以做到这一点吗 float(111232.23) Array ( [100000] => 1 [10000] => 1 [1000] => 1 [100] =>
float(111232.23)
Array
(
[100000] => 1
[10000] => 1
[1000] => 1
[100] => 2
[10] => 3
[1] => 2
)
<?php
$amounts = array(111232.23,4334.25,123.24,3.99);
function cheque_format($amount)
{
var_dump($amount);
#no need for millions
$levels = array(100000,10000,1000,100,10,1);
do{
$current_level = current($levels);
$modulo = $amount % $current_level;
$results[$current_level] = $div = number_format(floor($amount) / $current_level,0);
if($div)
{
$amount -= $current_level * $div;
}
}while($modulo && next($levels));
print_r($results);
}
foreach($amounts as $amount)
{
cheque_format($amount);
}
?>
float(111232.23)
排列
(
[100000] => 1
[10000] => 1
[1000] => 1
[100] => 2
[10] => 3
[1] => 2
)
我想您刚刚重新编写了PHP的函数。我的建议是使用PHP函数,而不是重新编写它
<?php
$number = 1234.56;
// english notation (default)
$english_format_number = number_format($number);
// 1,235
// French notation
$nombre_format_francais = number_format($number, 2, ',', ' ');
// 1 234,56
$number = 1234.5678;
// english notation without thousands separator
$english_format_number = number_format($number, 2, '.', '');
// 1234.57
?>
我不确定PHP脚本会是什么,但是如果你有10000、1000、100、10、1作为你需要的东西,那么你需要的数量是多少。多少10000美元
floor($dollar/10000)
有多少人
floor(($dollar%10000)/1000)
等等。这不是问题的答案,但下面也对小数进行了分解
function cheque_format($amount, $decimals = true, $decimal_seperator = '.')
{
var_dump($amount);
$levels = array(100000, 10000, 1000, 100, 10, 5, 1);
$decimal_levels = array(50, 20, 10, 5, 1);
preg_match('/(?:\\' . $decimal_seperator . '(\d+))?(?:[eE]([+-]?\d+))?$/', (string)$amount, $match);
$d = isset($match[1]) ? $match[1] : 0;
foreach ( $levels as $level )
{
$level = (float)$level;
$results[(string)$level] = $div = (int)(floor($amount) / $level);
if ($div) $amount -= $level * $div;
}
if ( $decimals ) {
$amount = $d;
foreach ( $decimal_levels as $level )
{
$level = (float)$level;
$results[$level < 10 ? '0.0'.(string)$level : '0.'.(string)$level] = $div = (int)(floor($amount) / $level);
if ($div) $amount -= $level * $div;
}
}
print_r($results);
}
function check_格式($amount,$decimals=true,$decimal_separator='))
{
var_dump(金额);
$levels=数组(100000、10000、1000、100、10、5、1);
$decimal_levels=数组(50,20,10,5,1);
预匹配('/(?:\'.$decimal\u separator.'(\d+)))(?:[eE]([+-]?\d+))))$/,(字符串)$amount,$match);
$d=isset($match[1])?$match[1]:0;
foreach($levels作为$level)
{
$level=(浮动)$level;
$results[(字符串)$level]=$div=(int)(下限($amount)/$level);
如果($div)$amount-=$level*$div;
}
如果($小数){
$amount=$d;
foreach($level作为$level)
{
$level=(浮动)$level;
$results[$level<10?'0.0'(字符串)$level:'0'(字符串)$level]=$div=(int)(下限($amount)/$level);
如果($div)$amount-=$level*$div;
}
}
打印(结果);
}
您知道吗,在php中,您可以简单地在十进制分隔符处拆分数字,然后将for循环从最后一个位置(长度)拆分到第一个位置(0)?虽然我很欣赏你用数学的方法来做这件事的精神,但我不认为它会更快。我确实需要实际的数字,因为它们必须放在地图上的特定框中cheque@Leo然后使用PHP函数回显数字,但保持原始数据完整。非常好。我这边+1