Schrift
[thread]12867[/thread]

Eingebene Dezimalzahl mit Komma umwandeln in Gleitkommazahl mit Punkt

Leser: 1


<< |< 1 2 >| >> 16 Einträge, 2 Seiten
Newbie2008
 2008-12-06 14:50
#116874 #116874
User since
2008-12-05
26 Artikel
BenutzerIn
[default_avatar]
Hallo,

wenn ich einen Benutzer eine Gleitkommazahl eingeben lassen möchte, der aber unwissentlich statt dem in perl üblichen Punkt ein Komma verwendet - wie kann ich diese "Komma-"Eingabe in Perl in eine "Punkt-"Eingabe umwandeln lassen?

Z.B. User gibt 5,10 ein und ich benötige es als 5.10


Gruß
Newbie2008
renee
 2008-12-06 15:01
#116876 #116876
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code (perl): (dl )
1
2
3
my $var  = '5,10';
$var =~ tr/,/./;
print $var;
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Newbie2008
 2008-12-06 15:19
#116877 #116877
User since
2008-12-05
26 Artikel
BenutzerIn
[default_avatar]
Hallo renee,

ich konnte es in mein Skript angepasst integrieren und es klappte - Danke!
Könntest du mir trotzdem bitte die Zeile 2 erläutern, damit ich auch verstehe, was passiert???

Danke schön
Newbie2008
pq
 2008-12-06 15:46
#116880 #116880
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
Newbie2008+2008-12-06 14:19:51--
Könntest du mir trotzdem bitte die Zeile 2 erläutern, damit ich auch verstehe, was passiert???

perldoc -f tr
oder
http://p3rl.org/tr
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
Newbie2008
 2008-12-06 16:10
#116882 #116882
User since
2008-12-05
26 Artikel
BenutzerIn
[default_avatar]
Danke
Gast Gast
 2008-12-06 19:00
#116891 #116891
renee+2008-12-06 14:01:02--
Code (perl): (dl )
1
2
3
my $var  = '5,10';
$var =~ tr/,/./;
print $var;

So geht's auch ...
Code: (dl )
 $num =~ s/(\d{1,3})(?=(?:\d{3}))/$1\,/g
pktm
 2008-12-06 20:42
#116894 #116894
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Also, ich habe jetzt mal eine Benchmark dazu laufen lassen:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/Perl/bin/perl

use strict;
use warnings;
use Benchmark qw(:all) ;

my $count = 10000000;

cmpthese($count, {
'tr' => sub {
my $var = '5,10';
$var =~ tr/,/./;
},
's' => sub {
my $var = '5,10';
$var =~ s/(\d{1,3})(?=(?:\d{3}))/$1\,/g
},
});


Und da kam folgendes raus:
Quote
Rate s tr
s 683761/s -- -79%
tr 3248863/s 375% --


Für diesen Ausdruck scheint der tr-Operator besser geeignet zu sein, da er weniger Zeit verbraucht. Das deckt sich mit meiner Vermutung, steht in der Doku zu tr///, dass keine Variableninterpolation innerhalb des Ausdrucks stattfinden. Nicht zuletzt sind Perl-RegEx sehr mächtig. Man kann sogar ohne Probleme kontextsensitive Sprachen als "regulären Ausdruck" definieren. Diese Maschinerie muss irgendwann ja mal angeworfen werden, und das braucht Zeit.
http://www.intergastro-service.de (mein erstes CMS :) )
pq
 2008-12-06 21:03
#116895 #116895
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
die zwei codes zu vergleichen, ist ziemlich sinnlos, denn der code von gast macht was ganz anderes =)
er fügt alle 3 zeichen ein komma ein, das aber auch nicht richtig:
Code: (dl )
1
2
3
4
5
$ perl -wle'
$num = shift;
$num =~ s/(\d{1,3})(?=(?:\d{3}))/$1\,/g;
print $num;' 12345678901
123,456,78,901
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
pq
 2008-12-06 21:04
#116896 #116896
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
Gast+2008-12-06 18:00:31--
renee+2008-12-06 14:01:02--
Code (perl): (dl )
1
2
3
my $var  = '5,10';
$var =~ tr/,/./;
print $var;

So geht's auch ...
Code: (dl )
 $num =~ s/(\d{1,3})(?=(?:\d{3}))/$1\,/g


nein, das macht etwas anderes als verlangt wurde, und das auch noch falsch (siehe meinen letzten beitrag)
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
Gast Gast
 2008-12-07 01:21
#116897 #116897
Mit
Code: (dl )
$num =~ s/(\d{1,3})(?=(?:\d{3}))/$1\./g
wird statt des Kommas, ein Punkt eingefügt. :-)
<< |< 1 2 >| >> 16 Einträge, 2 Seiten



View all threads created 2008-12-06 14:50.