我需要使用PHP將$ 89.50轉換爲Eight-Nine Dollar和Fifty Cents。有沒有我在某處失蹤的功能?將錢轉換爲PHP中的文本
4
A
回答
3
這是您的開始。這是我後來寫的一個遞歸函數(解決Project Euler problem 17的一部分),它將數字轉換爲字母......它可以處理一些相當大的數字;)
所有你需要做的就是添加美元和美分以及根據需要修改。所以基本上你必須爲美元數量調用一次函數,爲美分數量調用一次。我不認爲這有一個原生的PHP功能。你必須使用一個庫(比如梨)功能。
(你可以看到the function in action):
<?php
function translateToWords($number)
{
/*****
* A recursive function to turn digits into words
* Numbers must be integers from -999,999,999,999 to 999,999,999,999 inclussive.
*
* (C) 2010 Peter Ajtai
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* See the GNU General Public License: <http://www.gnu.org/licenses/>.
*
*/
// zero is a special case, it cause problems even with typecasting if we don't deal with it here
$max_size = pow(10,18);
if (!$number) return "zero";
if (is_int($number) && $number < abs($max_size))
{
switch ($number)
{
// set up some rules for converting digits to words
case $number < 0:
$prefix = "negative";
$suffix = translateToWords(-1*$number);
$string = $prefix . " " . $suffix;
break;
case 1:
$string = "one";
break;
case 2:
$string = "two";
break;
case 3:
$string = "three";
break;
case 4:
$string = "four";
break;
case 5:
$string = "five";
break;
case 6:
$string = "six";
break;
case 7:
$string = "seven";
break;
case 8:
$string = "eight";
break;
case 9:
$string = "nine";
break;
case 10:
$string = "ten";
break;
case 11:
$string = "eleven";
break;
case 12:
$string = "twelve";
break;
case 13:
$string = "thirteen";
break;
// fourteen handled later
case 15:
$string = "fifteen";
break;
case $number < 20:
$string = translateToWords($number%10);
// eighteen only has one "t"
if ($number == 18)
{
$suffix = "een";
} else
{
$suffix = "teen";
}
$string .= $suffix;
break;
case 20:
$string = "twenty";
break;
case 30:
$string = "thirty";
break;
case 40:
$string = "forty";
break;
case 50:
$string = "fifty";
break;
case 60:
$string = "sixty";
break;
case 70:
$string = "seventy";
break;
case 80:
$string = "eighty";
break;
case 90:
$string = "ninety";
break;
case $number < 100:
$prefix = translateToWords($number-$number%10);
$suffix = translateToWords($number%10);
$string = $prefix . "-" . $suffix;
break;
// handles all number 100 to 999
case $number < pow(10,3):
// floor return a float not an integer
$prefix = translateToWords(intval(floor($number/pow(10,2)))) . " hundred";
if ($number%pow(10,2)) $suffix = " and " . translateToWords($number%pow(10,2));
$string = $prefix . $suffix;
break;
case $number < pow(10,6):
// floor return a float not an integer
$prefix = translateToWords(intval(floor($number/pow(10,3)))) . " thousand";
if ($number%pow(10,3)) $suffix = translateToWords($number%pow(10,3));
$string = $prefix . " " . $suffix;
break;
case $number < pow(10,9):
// floor return a float not an integer
$prefix = translateToWords(intval(floor($number/pow(10,6)))) . " million";
if ($number%pow(10,6)) $suffix = translateToWords($number%pow(10,6));
$string = $prefix . " " . $suffix;
break;
case $number < pow(10,12):
// floor return a float not an integer
$prefix = translateToWords(intval(floor($number/pow(10,9)))) . " billion";
if ($number%pow(10,9)) $suffix = translateToWords($number%pow(10,9));
$string = $prefix . " " . $suffix;
break;
case $number < pow(10,15):
// floor return a float not an integer
$prefix = translateToWords(intval(floor($number/pow(10,12)))) . " trillion";
if ($number%pow(10,12)) $suffix = translateToWords($number%pow(10,12));
$string = $prefix . " " . $suffix;
break;
// Be careful not to pass default formatted numbers in the quadrillions+ into this function
// Default formatting is float and causes errors
case $number < pow(10,18):
// floor return a float not an integer
$prefix = translateToWords(intval(floor($number/pow(10,15)))) . " quadrillion";
if ($number%pow(10,15)) $suffix = translateToWords($number%pow(10,15));
$string = $prefix . " " . $suffix;
break;
}
} else
{
echo "ERROR with - $number<br/> Number must be an integer between -" . number_format($max_size, 0, ".", ",") . " and " . number_format($max_size, 0, ".", ",") . " exclussive.";
}
return $string;
}
?>
1
不,我相信你需要自己寫一個。實現起來相當簡單,但有一些角落案例需要處理。
0
不,PHP中沒有這樣的函數。最簡單的是,如果你下載一些代碼from the internet。
5
http://pear.php.net/package-info.php?package=Numbers_Words
因爲顯然「不」是不正確的回答這個問題。
»摘要
的PEAR Numbers_Words 包提供拼寫 標號在詞語的方法。
+0
哦,來吧。 「沒有。」是如此簡潔而優雅! – 2010-07-05 20:34:30
相關問題
- 1. 如何將文本轉換爲gridview內的錢?
- 2. 在PHP中將文本轉換爲PDF
- 3. 在PHP中將文本轉換爲HTML
- 4. PHP - 字符串轉換錢
- 5. 將文本轉換爲圖像php
- 6. php將文本轉換爲json變量
- 7. 轉換HTML文本爲PHP
- 8. 將BLOB轉換爲sql中的文本
- 9. 將bool轉換爲C++中的文本
- 10. 在PHP腳本中將文本轉換爲UTF-8
- 11. 將文本轉換爲xml
- 12. 將html轉換爲文本
- 13. 將文本轉換爲PDF
- 14. 將文本轉換爲URL
- 15. 將文本轉換爲Varchar
- 16. 將csv轉換爲文本
- 17. 將文本轉換爲列
- 18. 將TextBox文本轉換爲
- 19. 將ascii轉換爲文本
- 20. 將指針轉換爲C++中的值會花費多少錢?
- 21. 將文本框轉換爲文本區
- 22. 將HTML文本轉換爲純文本
- 23. PHP將gif中的簡單數字轉換爲文本?
- 24. 將文本轉換爲MySQL中
- 25. 在SQL中將文本轉換爲INT
- 26. PHP的錢字符串轉換爲整數錯誤
- 27. 將PHP/GeoJson/Shape文件轉換爲PHP中的DXF文件
- 28. JavaFx無法將文本轉換爲textField,也無法將textField轉換爲文本?
- 29. 將YAML文件轉換爲PHP文件
- 30. 將.php文件轉換爲.html文件?
我有一個類似的問題,我如何「轉換PHP來錢」 :) 有什麼方法? – adardesign 2010-07-05 20:35:57