自定义格式编号灵活
我的php代码如下:
<?php
class number_word {
private $word_array = array(1=>"One",2=>"Two",3=>"Three",4=>"Four",5=>"Five",6=>"Six",7=>"Seven",8=>"Eight",9=>"Nine",10=>"Ten",11=>"Eleven",12=>"Twelve",13=>"Thirteen",14=>"Fourteen",15=>"Fifteen",16=>"Sixteen",17=>"Seventeen",18=>"Eighteen",19=>"Nineteen",20=>"Twenty",21=>"Twenty-One",22=>"Twenty-Two",23=>"Twenty-Three",24=>"Twenty-Four",25=>"Twenty-Five",26=>"Twenty-Six",27=>"Twenty-Seven",28=>"Twenty-Eight",29=>"Twenty-Nine",30=>"Thirty",31=>"Thirty-One",32=>"Thirty-Two",33=>"Thirty-Three",34=>"Thirty-Four",35=>"Thirty-Five",36=>"Thirty-Six",37=>"Thirty-Seven",38=>"Thirty-Eight",39=>"Thirty-Nine",40=>"Forty",41=>"Forty-One",42=>"Forty-Two",43=>"Forty-Three",44=>"Forty-Four",45=>"Forty-Five",46=>"Forty-Six",47=>"Forty-Seven",48=>"Forty-Eight",49=>"Forty-Nine",50=>"Fifty",51=>"Fifty-One",52=>"Fifty-Two",53=>"Fifty-Three",54=>"Fifty-Four",55=>"Fifty-Five",56=>"Fifty-Six",57=>"Fifty-Seven",58=>"Fifty-Eight",59=>"Fifty-Nine",60=>"Sixty",61=>"Sixty-One",62=>"Sixty-Two",63=>"Sixty-Three",64=>"Sixty-Four",65=>"Sixty-Five",66=>"Sixty-Six",67=>"Sixty-Seven",68=>"Sixty-Eight",69=>"Sixty-Nine",70=>"Seventy",71=>"Seventy-One",72=>"Seventy-Two",73=>"Seventy-Three",74=>"Seventy-Four",75=>"Seventy-Five",76=>"Seventy-Six",77=>"Seventy-Seven",78=>"Seventy-Eight",79=>"Seventy-Nine",80=>"Eighty",81=>"Eighty-One",82=>"Eighty-Two",83=>"Eighty-Three",84=>"Eighty-Four",85=>"Eighty-Five",86=>"Eighty-Six",87=>"Eighty-Seven",88=>"Eighty-Eight",89=>"Eighty-Nine",90=>"Ninety",91=>"Ninety-One",92=>"Ninety-Two",93=>"Ninety-Three",94=>"Ninety-Four",95=>"Ninety-Five",96=>"Ninety-Six",97=>"Ninety-Seven",98=>"Ninety-Eight",99=>"Ninety-Nine",100=>"One Hundred",200=>"Two Hundred",300=>"Three Hundred",400=>"Four Hundred",500=>"Five Hundred",600=>"Six Hundred",700=>"Seven Hundred",800=>"Eight Hundred",900=>"Nine Hundred");
private $thousand = array("", "Thousand, ", "Million, ", "Billion, ", "Trillion, ", "Zillion, ");
private $val, $currency0, $currency1;
private $val_array, $dec_value, $dec_word, $num_value, $num_word;
var $val_word;
public function number_word($in_val = 0, $in_currency0 = "", $in_currency1 = "") {
$this->val = $in_val;
$this->currency0 = $in_currency0;
$this->currency1 = $in_currency1;
$this->val = abs(floatval(str_replace(",","",$this->val)));
if ($this->val > 0) {
$this->val = number_format($this->val, '2', ',', ',');
$this->val_array = explode(",", $this->val);
$this->dec_value = intval($this->val_array[count($this->val_array) - 1]);
if ($this->dec_value > 0) {
$this->dec_word = $this->word_array[$this->dec_value]." ".$this->currency1;
}
$t = 0;
$this->num_word = "";
for ($i = count($this->val_array) - 2; $i >= 0; $i--) {
$this->num_value = intval($this->val_array[$i]);
if ($this->num_value == 0) {
$this->num_word = "".$this->num_word;
}
elseif (strlen($this->num_value."") <= 2) {
$this->num_word = $this->word_array[$this->num_value]." ".$this->thousand[$t].$this->num_word;
// add 'and' if not last element in VAL
if ($i == 1) {
$this->num_word = " and ".$this->num_word;
}
}
else {
$this->num_word = $this->word_array[substr($this->num_value, 0, 1)."00"]. (intval(substr($this->num_value, 1, 2)) > 0 ? " and " : "") .$this->word_array[intval(substr($this->num_value, 1, 2))]." ".$this->thousand[$t].$this->num_word;
}
$t++;
}
if (!empty($this->num_word)) {
$this->num_word .= " ".$this->currency0;
}
}
$this->val_word = $this->num_word." ".$this->dec_word;
}
}
?>
上面的代码可以正确读取格式数字7,052,853.62,但我也希望代码能够读取其他类型的格式数字,例如; 7.052.853,62 或 7 052 853,62 当我将逗号更改为点时,例如
$this->val = abs(floatval(str_replace(",","",$this->val)));
if ($this->val > 0) {
$this->val = number_format($this->val, '2', ',', ',');
$this->val_array = explode(",", $this->val);
更新: 测试:
echo $nw->number_word('52,853.62', '美元'、'分');
那么代码无法再读取分格式数字,我应该做什么来修复它?如有任何指点,我将不胜感激并感谢
I have php code as following:
<?php
class number_word {
private $word_array = array(1=>"One",2=>"Two",3=>"Three",4=>"Four",5=>"Five",6=>"Six",7=>"Seven",8=>"Eight",9=>"Nine",10=>"Ten",11=>"Eleven",12=>"Twelve",13=>"Thirteen",14=>"Fourteen",15=>"Fifteen",16=>"Sixteen",17=>"Seventeen",18=>"Eighteen",19=>"Nineteen",20=>"Twenty",21=>"Twenty-One",22=>"Twenty-Two",23=>"Twenty-Three",24=>"Twenty-Four",25=>"Twenty-Five",26=>"Twenty-Six",27=>"Twenty-Seven",28=>"Twenty-Eight",29=>"Twenty-Nine",30=>"Thirty",31=>"Thirty-One",32=>"Thirty-Two",33=>"Thirty-Three",34=>"Thirty-Four",35=>"Thirty-Five",36=>"Thirty-Six",37=>"Thirty-Seven",38=>"Thirty-Eight",39=>"Thirty-Nine",40=>"Forty",41=>"Forty-One",42=>"Forty-Two",43=>"Forty-Three",44=>"Forty-Four",45=>"Forty-Five",46=>"Forty-Six",47=>"Forty-Seven",48=>"Forty-Eight",49=>"Forty-Nine",50=>"Fifty",51=>"Fifty-One",52=>"Fifty-Two",53=>"Fifty-Three",54=>"Fifty-Four",55=>"Fifty-Five",56=>"Fifty-Six",57=>"Fifty-Seven",58=>"Fifty-Eight",59=>"Fifty-Nine",60=>"Sixty",61=>"Sixty-One",62=>"Sixty-Two",63=>"Sixty-Three",64=>"Sixty-Four",65=>"Sixty-Five",66=>"Sixty-Six",67=>"Sixty-Seven",68=>"Sixty-Eight",69=>"Sixty-Nine",70=>"Seventy",71=>"Seventy-One",72=>"Seventy-Two",73=>"Seventy-Three",74=>"Seventy-Four",75=>"Seventy-Five",76=>"Seventy-Six",77=>"Seventy-Seven",78=>"Seventy-Eight",79=>"Seventy-Nine",80=>"Eighty",81=>"Eighty-One",82=>"Eighty-Two",83=>"Eighty-Three",84=>"Eighty-Four",85=>"Eighty-Five",86=>"Eighty-Six",87=>"Eighty-Seven",88=>"Eighty-Eight",89=>"Eighty-Nine",90=>"Ninety",91=>"Ninety-One",92=>"Ninety-Two",93=>"Ninety-Three",94=>"Ninety-Four",95=>"Ninety-Five",96=>"Ninety-Six",97=>"Ninety-Seven",98=>"Ninety-Eight",99=>"Ninety-Nine",100=>"One Hundred",200=>"Two Hundred",300=>"Three Hundred",400=>"Four Hundred",500=>"Five Hundred",600=>"Six Hundred",700=>"Seven Hundred",800=>"Eight Hundred",900=>"Nine Hundred");
private $thousand = array("", "Thousand, ", "Million, ", "Billion, ", "Trillion, ", "Zillion, ");
private $val, $currency0, $currency1;
private $val_array, $dec_value, $dec_word, $num_value, $num_word;
var $val_word;
public function number_word($in_val = 0, $in_currency0 = "", $in_currency1 = "") {
$this->val = $in_val;
$this->currency0 = $in_currency0;
$this->currency1 = $in_currency1;
$this->val = abs(floatval(str_replace(",","",$this->val)));
if ($this->val > 0) {
$this->val = number_format($this->val, '2', ',', ',');
$this->val_array = explode(",", $this->val);
$this->dec_value = intval($this->val_array[count($this->val_array) - 1]);
if ($this->dec_value > 0) {
$this->dec_word = $this->word_array[$this->dec_value]." ".$this->currency1;
}
$t = 0;
$this->num_word = "";
for ($i = count($this->val_array) - 2; $i >= 0; $i--) {
$this->num_value = intval($this->val_array[$i]);
if ($this->num_value == 0) {
$this->num_word = "".$this->num_word;
}
elseif (strlen($this->num_value."") <= 2) {
$this->num_word = $this->word_array[$this->num_value]." ".$this->thousand[$t].$this->num_word;
// add 'and' if not last element in VAL
if ($i == 1) {
$this->num_word = " and ".$this->num_word;
}
}
else {
$this->num_word = $this->word_array[substr($this->num_value, 0, 1)."00"]. (intval(substr($this->num_value, 1, 2)) > 0 ? " and " : "") .$this->word_array[intval(substr($this->num_value, 1, 2))]." ".$this->thousand[$t].$this->num_word;
}
$t++;
}
if (!empty($this->num_word)) {
$this->num_word .= " ".$this->currency0;
}
}
$this->val_word = $this->num_word." ".$this->dec_word;
}
}
?>
code above can be properly read format number 7,052,853.62 but I also want the code able to read other types of formatting numbers, for example; 7.052.853,62 or 7 052 853,62 and when I change comma into dot at line e.g.
$this->val = abs(floatval(str_replace(",","",$this->val)));
if ($this->val > 0) {
$this->val = number_format($this->val, '2', ',', ',');
$this->val_array = explode(",", $this->val);
UPDATE:
testing:
echo $nw->number_word('52,853.62',
'Dollar', 'Cent');
then the code can no longer read the cent format number, what i should do to fix it? any pointers I would appreciate and thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
在对 $this->val 进行的第一次赋值中,将除数字以外的任何字符替换为空格。
即
编辑:1)从正则表达式中删除 g 标志
2) 添加了 str_replace 并更改了正则表达式以处理德语和美国/英国格式
Replace any character other than a digit with a blank in the first assignment made to $this->val.
i.e.
Edit: 1)Remove g flag from Regex
2) Added the str_replace and changed the regex to handle German and US/UK format