2009-08-18 38 views
6

Ich brauche Code in meinem Programm, der eine Zahl als Eingabe nimmt und sie in entsprechenden Text konvertiert, z. 745 zu "sieben hundert fünfundvierzig".Wie kann ich eine Zahl in Perl umwandeln?

Jetzt kann ich Code dafür schreiben, aber gibt es irgendeine Bibliothek oder vorhandenen Code, den ich verwenden kann?

+1

Arbeiten an einem Problem Euler Projekt, ihr? – dala

+0

verwandt: http://stackoverflow.com/questions/309884/code-golf-number-to-words –

Antwort

17

Von Perldoc von Lingua::EN::Numbers:

use Lingua::EN::Numbers qw(num2en num2en_ordinal); 

my $x = 234; 
my $y = 54; 
print "You have ", num2en($x), " things to do today!\n"; 
print "You will stop caring after the ", num2en_ordinal($y), ".\n"; 

druckt:

You have two hundred and thirty-four things to do today! 
You will stop caring after the fifty-fourth. 
1

Sie können so etwas wie dies versuchen:

#!/usr/bin/perl 

use strict; 
use warnings; 

my %numinwrd = (
    0 => 'Zero', 1 => 'One', 2 => 'Two', 3 => 'Three', 4 => 'Four', 
    5 => 'Five', 6 => 'Six', 7 => 'Seven', 8 => 'Eight', 9 => 'Nine', 
); 

print "The number when converted to words is 745=>".numtowrd(745)."\n"; 

sub numtowrd { 
    my $num = shift; 
    my $txt = ""; 
    my @val = $num =~ m/./g; 

    foreach my $digit (@val) {  
    $txt .= $numinwrd{$digit} . " "; 
    } 

    return $txt; 
} 

Die Ausgabe lautet:

The number when converted to words is 745=>Seven Four Five 
+0

Um '@ val' in '$ txt' zu konvertieren, könnte es einfacher sein,' $ txt = join 'zu machen "" , mappe {$ numinwrd {$ _}} @ val', damit dein Sub effektiv ein One-Liner wird. Auch diese Lösung produziert nicht "sieben hundert fünfundvierzig". – amon

+0

Sie können den Code angeben, wenn Sie die Ausgabe auf siebenhundertvierundvierzig machen können – user1613245

Verwandte Themen