<?php
define("MAJOR", 'pounds');
define("MINOR", 'p');
class toWords
{
var $pounds;
var $pence;
var $major;
var $minor;
var $words = '';
var $number;
var $magind;
var $units = array('', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine');
var $teens = array('ten', 'eleven', 'twelve', 'thirteen', 'fourteen', 'fifteen', 'sixteen', 'seventeen', 'eighteen', 'nineteen');
var $tens = array('', 'ten', 'twenty', 'thirty', 'forty', 'fifty', 'sixty', 'seventy', 'eighty', 'ninety');
var $mag = array('', 'thousand', 'million', 'billion', 'trillion');
function toWords($amount, $major = MAJOR, $minor = MINOR)
{
$this->major = $major;
$this->minor = $minor;
$this->number = number_format($amount, 2);
list($this->pounds, $this->pence) = explode('.', $this->number);
$this->words = " $this->major $this->pence$this->minor";
if ($this->pounds == 0)
$this->words = "Zero $this->words";
else {
$groups = explode(',', $this->pounds);
$groups = array_reverse($groups);
for ($this->magind = 0; $this->magind < count($groups); $this->magind++) {
if (($this->magind == 1) && (strpos($this->words, 'hundred') === false) && ($groups[0] != '000'))
$this->words = ' and ' . $this->words;
$this->words = $this->_build($groups[$this->magind]) . $this->words;
}
}
}
function _build($n)
{
$res = '';
$na = str_pad("$n", 3, "0", STR_PAD_LEFT);
if ($na == '000')
return '';
if ($na{0} != 0)
$res = ' ' . $this->units[$na{0}] . ' hundred';
if (($na{1} == '0') && ($na{2} == '0'))
return $res . ' ' . $this->mag[$this->magind];
$res .= $res == '' ? '' : ' and';
$t = (int) $na{1};
$u = (int) $na{2};
switch ($t) {
case 0:
$res .= ' ' . $this->units[$u];
break;
case 1:
$res .= ' ' . $this->teens[$u];
break;
default:
$res .= ' ' . $this->tens[$t] . ' ' . $this->units[$u];
break;
}
$res .= ' ' . $this->mag[$this->magind];
return $res;
}
}
用过的:
$amount = 12345.67;
$obj = new toWords($amount);
echo $obj->words; // gives Twelve thousand three hundred forty five pounds 67p
echo '<br/>';
echo $obj->number; // gives 12,345.67
请上面的代码将数字转换为单词,但我面临的问题是如何将点后的最后两位数字(从而将 .67 更改为 67)转换为单词。如果你能帮助我,我将不胜感激。谢谢