perlunity.de - PERL | JAVASCRIPT | PHP | MySQL | APACHE



#!/COMMUNITY

Members: 5374
davon online: 1
weitere User: 18
Click for quality!




12.02.2012 / 02:01

Community-Member werden   |   Paßwort vergessen   |   OnlineMonitor (1) Wer ist online ... OnlineMonitor starten !
     

 

Home


PERLscripts


PHPscripts


JAVAscripts


Hilfreiches


Links2www


Newscenter


Community


Interna




Community  »  Perl: Allgemeines Forum zur Themenübersicht Themensuche Themenansicht in Thread-Modus


BeitragAbfrage auf anzahl der stellen einer zahl
Seitenanfang
folgendes, ich hab eine variable

$zahl

diese zahl kann zb werte von 1 -10000000 enthalten

da 1000 MB ein GB sind, möchte ich eine schleife basteln a la

if ( $zahl = 1-3 stellen)
{print $zahl MB}

if ($zahl = 1 - 6 stellen)
{ print $zahl GB}

usw hat jemand eine idee wie das geht?

Datum: 03.02.2005-20:49

Beitragre: Abfrage auf anzahl der stellen einer zahl
Seitenanfang
Am besten Du splitest die Zahl in einzelne Zeichen, die packst danach in einen Array und dann kannst die Zählen ... fällt mir so spontan als Lösung ein.
Sollte dann wohl ungefähr so ausschaun:

my @zahlen = split //, $zahl;

my count = 0;

foreach(@zahlen)
{
$count++;
}

if($count <= 999)
{
print "Die Zahl besteht aus weniger als 4 Zeichen ($count Zeichen)";
}
elsif($count <= 999999)
{
print "Die Zahl besteht mehr als 3 und weniger als 6 Zeichen ($count Zeichen)";
}
else
{
print "Die Zahl besteht aus mehr als 6 Zeichen ($count Zeichen);
}

MfG

Leprechaun

Datum: 04.02.2005-08:59

Beitragre: Abfrage auf anzahl der stellen einer zahl
Seitenanfang
äh, schonmal was von length() gehört?
notfalls zuerst die zahl in nen string wandeln:
$zahl .= "";
print $zahl." hat ".length($zahl)." stellen!\n";

oder nicht?

Paul

Datum: 04.02.2005-12:18

Beitragre: Abfrage auf anzahl der stellen einer zahl
Seitenanfang
na klar....length () macht das ........ auch ohne "stringumwandlung" :-))
gruß
stef

Datum: 04.02.2005-13:04

Beitragre: Abfrage auf anzahl der stellen einer zahl
Seitenanfang
Bei all den Loesungen gibt es nur ein Problem: Sie orientieren sich an der Anzahl der Stellen, wie wir aber wissen entspricht ein Kilobyte 1024 Bytes und nicht 1000 Bytes, bei hoeheren Groeszenordnungen (bspw. Giga- und Terrabyte) fuehrt das zu immens falschen Ergebnissen.


#!/usr/bin/perl

use strict;
use warnings;

use constant TB => 2**40;
use constant GB => 2**30;
use constant MB => 2**20;
use constant KB => 1024;

my $byte = '800'; # 800 Byte

printf("%s\n", human_readable($byte));

$byte += 1024; # plus ein Kilobyte => 1824 Byte

printf("%s\n", human_readable($byte));

$byte *= 1e3; # mal 1000 => 1824000 Byte

printf("%s\n", human_readable($byte));

sub human_readable {
$_[0] >= TB && return sprintf("%.03f TB", $_[0] / TB);
$_[0] >= GB && return sprintf("%.03f GB", $_[0] / GB);
$_[0] >= MB && return sprintf("%.03f MB", $_[0] / MB);
$_[0] >= KB && return sprintf("%.03f kB", $_[0] / KB);
return "$_[0] B";
}

Grusz coax.

Datum: 04.02.2005-18:18

Beitragre: Abfrage auf anzahl der stellen einer zahl
Seitenanfang
if($zahl < 1024) {
$value = $zahl;
$unit = "KB";
} elsif($zahl >= 1024 && $zahl < 1024**2) {

$unit = "MB";
} elsif($zahl >= 1024**2 && $zahl < 1024**3) {
$value = $zahl/1024;
$unit = "GB";
} elsif($zahl >= 1024**3 && $zahl < 1024**4) {
$value = $zahl/1024**2;
$unit = "TB";
}

print "$value $unit\n";

__END__
Ist wohl eine der einfachsten und logischsten Lösungen. Diese Art herauszufinden was für eine Einheit dein Wert haben soll setzt aber vorraus, dass $zahl die Groesse in Kilobyte enthält. $value enthält demnach am Ende den passenden Wert zur Einheit ($unit).

Datum: 05.02.2005-19:29

BeitragKorrektur
Seitenanfang
#!perl -w

use strict;
use vars qw/$zahl $value $unit/;

$zahl = ...;

if($zahl < 1024) {
$value = $zahl;
$unit = "KB";
} elsif($zahl >= 1024 && $zahl < 1024**2) {
$value = $zahl/1024;
$unit = "MB";
} elsif($zahl >= 1024**2 && $zahl < 1024**3) {
$value = $zahl/1024**2;
$unit = "GB";
} elsif($zahl >= 1024**3 && $zahl < 1024**4) {
$value = $zahl/1024**3;
$unit = "TB";
}

print "$value $unit\n";

__END__

So stimmts... habs im Thread vorher ein wenig vermasselt

Datum: 05.02.2005-19:32

-






-
-