Kann jemand eine Zahl wie 1, 2 oder 3 in ihre Textversion konvertieren (eins, zwei, drei) in PHP? Ich muss nur von 1 auf 99 umrechnen. Ich weiß, ich könnte eine riesige Switch-Anweisung schreiben, aber das wäre lächerlich.Konvertieren einer Zahl (1, 2, 3) in eine Zeichenfolge (eins, zwei, drei) in PHP
Antwort
Birne ein Paket hat Numbers_Words:
$numberToWord = new Numbers_Words(); echo $numberToWords->toWords(200);
+1 Wusste nicht, dass es existiert. –
+1 Blick auf mich. –
Oder einfach: 'Numbers_Words :: toWords (200)' –
Nicht wirklich ideal, aber atleast besser als eine 'riesige Switch-Anweisung':
$numbermappings = array("zero", "one","two","three", "four" .... "ninetynine");
echo $numbermappings[4]; // four
Sie immer noch, obwohl die riesige Array schreiben ..
Nützlich, wenn Sie keine große Anzahl an Zahlen benötigen. – trueinViso
Siehe this function in action:
function N2L($number)
{
$result = array();
$tens = floor($number/10);
$units = $number % 10;
$words = array
(
'units' => array('', 'One', 'Two', 'Three', 'Four', 'Five', 'Six', 'Seven', 'Eight', 'Nine', 'Ten', 'Eleven', 'Twelve', 'Thirteen', 'Fourteen', 'Fifteen', 'Sixteen', 'Seventeen', 'Eightteen', 'Nineteen'),
'tens' => array('', '', 'Twenty', 'Thirty', 'Fourty', 'Fifty', 'Sixty', 'Seventy', 'Eigthy', 'Ninety')
);
if ($tens < 2)
{
$result[] = $words['units'][$tens * 10 + $units];
}
else
{
$result[] = $words['tens'][$tens];
if ($units > 0)
{
$result[count($result) - 1] .= '-' . $words['units'][$units];
}
}
if (empty($result[0]))
{
$result[0] = 'Zero';
}
return trim(implode(' ', $result));
}
Es gibt ein PEAR-Paket, das dies tut. Es tut Zahl viel höher als 99 und ist mehrsprachig, so könnte es mehr Schwergewicht sein, als Sie brauchen, aber immer noch einen Besuch wert:
Hier ist ein ich im College zurück geschrieben. Es enthält auch Unterstützung für negative Zahlen. Ich weiß, es gibt einige Möglichkeiten, wie es gekürzt und/oder aufgeräumt werden könnte, aber hey, es funktioniert gut für beliebig Integer!
/**
Converts an integer to its textual representation.
@param num the number to convert to a textual representation
@param depth the number of times this has been recursed
*/
function readNumber($num, $depth=0)
{
$num = (int)$num;
$retval ="";
if ($num < 0) // if it's any other negative, just flip it and call again
return "negative " + readNumber(-$num, 0);
if ($num > 99) // 100 and above
{
if ($num > 999) // 1000 and higher
$retval .= readNumber($num/1000, $depth+3);
$num %= 1000; // now we just need the last three digits
if ($num > 99) // as long as the first digit is not zero
$retval .= readNumber($num/100, 2)." hundred\n";
$retval .=readNumber($num%100, 1); // our last two digits
}
else // from 0 to 99
{
$mod = floor($num/10);
if ($mod == 0) // ones place
{
if ($num == 1) $retval.="one";
else if ($num == 2) $retval.="two";
else if ($num == 3) $retval.="three";
else if ($num == 4) $retval.="four";
else if ($num == 5) $retval.="five";
else if ($num == 6) $retval.="six";
else if ($num == 7) $retval.="seven";
else if ($num == 8) $retval.="eight";
else if ($num == 9) $retval.="nine";
}
else if ($mod == 1) // if there's a one in the ten's place
{
if ($num == 10) $retval.="ten";
else if ($num == 11) $retval.="eleven";
else if ($num == 12) $retval.="twelve";
else if ($num == 13) $retval.="thirteen";
else if ($num == 14) $retval.="fourteen";
else if ($num == 15) $retval.="fifteen";
else if ($num == 16) $retval.="sixteen";
else if ($num == 17) $retval.="seventeen";
else if ($num == 18) $retval.="eighteen";
else if ($num == 19) $retval.="nineteen";
}
else // if there's a different number in the ten's place
{
if ($mod == 2) $retval.="twenty ";
else if ($mod == 3) $retval.="thirty ";
else if ($mod == 4) $retval.="forty ";
else if ($mod == 5) $retval.="fifty ";
else if ($mod == 6) $retval.="sixty ";
else if ($mod == 7) $retval.="seventy ";
else if ($mod == 8) $retval.="eighty ";
else if ($mod == 9) $retval.="ninety ";
if (($num % 10) != 0)
{
$retval = rtrim($retval); //get rid of space at end
$retval .= "-";
}
$retval.=readNumber($num % 10, 0);
}
}
if ($num != 0)
{
if ($depth == 3)
$retval.=" thousand\n";
else if ($depth == 6)
$retval.=" million\n";
if ($depth == 9)
$retval.=" billion\n";
}
return $retval;
}
Warum die Newline nach hundert, tausend, Millionen und Milliarden? Sollte das nicht ein Raum sein? – bdsl
Das ist falsch für eine Billion und größere Zahlen. – bdsl
Er schrieb für jede ** Ganzzahl **. Da der Maximalwert einer ganzen Zahl 2147483647 für ein 32-Bit-System in PHP ist, ist er mit seiner Aussage grundsätzlich korrekt! Zusätzlich hat 64-Bit für PHP im Jahr 2008 experimentell begonnen, so ist es lickely, dass er den maximalen Wert für 32-Bit meinte. – geisterfurz007
Ich musste dies für einen Codierungstest während eines Interviewprozesses schreiben. https://github.com/mangs/integers2words
Der Einfachheit halber ist hier die DemoLibrary Klasse, die diese int2str implementiert() Funktionalität (alle Klassenmitglieder geben es nur zur Unterstützung der int2str()
Funktionalität):
<?php
/**
* Demo library class intended to be added to in the future
*/
class DemoLibrary {
/***** NOTE: a const cannot be an array in PHP, so making these arrays static is the next best thing *****/
/**
* @var array $_numbersUnder20 Array containing the word associated with the index's number value
*/
private static $_numbersUnder20 = [
'zero', 'one', 'two', 'three', 'four',
'five', 'six', 'seven', 'eight', 'nine',
'ten', 'eleven', 'twelve', 'thirteen', 'fourteen',
'fifteen', 'sixteen', 'seventeen', 'eighteen', 'nineteen'
];
/**
* @var array $_tensDigits Array containing all tens digit values except 10
*/
private static $_tensDigits = [
'twenty', 'thirty', 'forty', 'fifty', 'sixty', 'seventy', 'eighty', 'ninety'
];
/**
* @var array $_orderOfMagnitude Array containing the higher-order digit values; can also be
* thought of as the order of magnitude of the target digit
*/
private static $_orderOfMagnitude = [
// Stopped at "quintillion" because the maximum PHP int value on 64-bit Linux is
// 9,223,372,036,854,775,807 (a.k.a. 2^63 - 1 because PHP doesn't support unsigned ints)
'thousand', 'million', 'billion', 'trillion', 'quadrillion', 'quintillion'
];
/**
* Recursively calculates the string-, word-based equivalent of the target integer
*
* @param integer $num Integer whose value will be converted to a word-based string
* @param boolean $recursive Determines if the currently-executing code is being called
* recursively; allows for non-recursive 0 to be converted to "zero"
* otherwise use an empty string
*
* @throws InvalidArgumentException if the first argument is not of type int
*
* @return string Partially- or fully-built word-based representation of the target integer
*/
private function _integerToWords($num, $recursive=false) {
// Ensure a valid integer
if(!is_int($num)) {
throw new InvalidArgumentException(
__FUNCTION__ . ' expects parameter 1 to be of type integer; actual type: ' .
gettype($num)
);
}
/***** Perform the int to string conversion based on the size of $num *****/
// Negative
if($num < 0) {
return 'negative ' . $this->_integerToWords(-1 * $num, true);
}
// 0 or no value in the lowest digits
if($num === 0) {
return $recursive ? '' : 'zero';
}
// 1-19
if($num < 20) {
return self::$_numbersUnder20[$num];
}
// 20 - 99
if($num < 100) {
$highDigitValue = intval(floor($num/10) - 2); // Value of the highest-order digit
$remainingValue = $num % 10; // Value of the remaining digits
return
self::$_tensDigits[$highDigitValue] .
'-' .
$this->_integerToWords($remainingValue, true);
}
// 100 - 999
if($num < 1000) {
$highDigitValue = intval(floor($num/100)); // Value of the highest-order digit
$remainingValue = $num % 100; // Value of the remaining digits
return
$this->_integerToWords($highDigitValue, true) .
'-hundred ' .
$this->_integerToWords($remainingValue, true);
}
// 1,000+
$quotient = $num;
$divideCount = 0;
while($quotient >= 1000) {
$quotient /= 1000;
++$divideCount;
}
$highDigitValue = intval(floor($quotient)); // Value of the highest-order digit
$remainingValue = $num - ($highDigitValue * pow(1000, $divideCount)); // Value of the remaining digits
return
$this->_integerToWords($highDigitValue, true) .
'-' .
self::$_orderOfMagnitude[$divideCount - 1] .
' ' .
$this->_integerToWords($remainingValue, true);
}
/**
* @api
*
* Calculates the string-, word-based equivalent of the target integer
*
* @param integer $num Integer whose value will be converted to a word-based string
*
* @return string Fully-built word-based representation of the target integer
*/
public function int2str($num) {
return trim($this->_integerToWords($num), "- \t\n\r\0\x0B");
}
}
- 1. in PHP Wie mache ich ein ähnliches Array ("Eins", "Zwei", "Drei") in $ Somearray ["Eins"] ["Zwei"] ["Drei"]?
- 2. TypeScript Konvertieren einer Zeichenfolge in eine Zahl
- 3. Transform [: eins, 1,: zwei, 2] zu {: eins => 1,: zwei => 2} in Ruby
- 4. Zahl in binäre Zeichenfolge konvertieren
- 5. Konvertieren einer Zeichenfolge in eine Zahl in MongoDB-Projektion
- 6. Konvertieren einer Zeichenfolge in eine ganze Zahl unter Android
- 7. Überprüfen der Koma in einer gegebenen Zeichenfolge/Zahl in PHP
- 8. konvertieren eine ganze Zahl in eine Zeichenfolge in Erlang
- 9. wie eine Zahl in ihre 2 Kompliment in Java konvertieren
- 10. Konvertieren einer Zahl in Text Ausnahme
- 11. konvertieren 10-stellige Zahl in Hex-Zeichenfolge
- 12. eine ganze Zahl und eine Zeichenfolge in einer Enum-Klasse
- 13. Eine Zahl aus einer 1-Wort-Zeichenfolge extrahieren
- 14. Konvertieren Sie eine Hash-Zeichenfolge in eine formatierte Zahl?
- 15. Zeichenfolge explodieren und eine Zahl hinzufügen? php
- 16. Wie kann ich eine absolut massive Zahl in einer angemessenen Zeit in eine Zeichenfolge konvertieren?
- 17. R konvertieren 2 Bytes von Rohdaten in eine ganze Zahl
- 18. Konvertieren von Vektor <unsigned char> {1,2,3} in Zeichenfolge "1-2-3" AS DIGITS
- 19. Konvertieren einer Zahl in eine Liste von ganzen Zahlen
- 20. Eine Zeichenfolge in eine ganze Zahl aufteilen
- 21. Erhalten letzten drei Ziffern einer ganzen Zahl
- 22. wie zwei Bytes in eine 16-Bit-Zahl konvertieren?
- 23. PHP: Konvertieren einer 64-Bit-Ganzzahl in eine Zeichenfolge
- 24. Wie konvertiert man eine numerische Zeichenfolge in Zahl (Dezimal) und Zahl in Zeichenfolge
- 25. Konvertieren einer Zeichenfolge in eine Ganzzahl in Oracle
- 26. Konvertieren einer Zeichenfolge in eine Ganzzahl in Fortran 90
- 27. PHP - Wählen Sie einen Teil einer Zeichenfolge zwischen zwei Zeichen
- 28. Warum + str ist besser als str * 1 in JS, um eine Zeichenfolge in eine Zahl zu konvertieren?
- 29. Wie man irgendeine Zahl nimmt und eine Zahl zwischen 1-3 erhält
- 30. Konvertieren eine Zeichenfolge eine römische Zahl enthält, entspricht integer
Sie können meinen letzten Code bei Github hier sehen mögliches Duplikat von [Gibt es eine einfache Möglichkeit, eine Zahl in PHP zu konvertieren?] (http://stackoverflow.com/questions/277569/is-there-an-easy-way-to-convert-a-number) -to-a-word-in-php) –
erfüllte Antwort hier [http://stackoverflow.com/questions/14314997/how-to-convert-amount-in-number-to-words](http://stackoverflow .com/questions/14314997/how-to-convert-Menge-in-number-to-words) –