Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 27-08-2005, 22:03   #1 (permalink)
Der Flasher...:D
 
Benutzerbild von Bananchen
 
Registriert seit: May 2005
Beiträge: 58
Post Zahlen runden -> Funktion

Jo hi all,

nachdem ich nun gelegentlich hier schon unterwegs war um meine Kleinigkeiten zu klären, wollt ich mal was spendieren.

Da ich beiläufig mitbekommen habe, dass ich nicht der einzige bin, welcher sich Gedanken ums Runden von Zahlen gemacht hat, hier meine Funktion:

ActionScript:
  1. _global.zahlRunden = function(zahl, stellen) {
  2.     faktor = Math.pow(10, stellen);
  3.     zahl = (Math.ceil(zahl*faktor)/faktor).toString();
  4.     if (zahl.toString().indexOf(".", 0)<0 && stellen>0) {
  5.         zahl += ".";
  6.         for (i=0; i<stellen; i++) {
  7.             zahl += "0";
  8.         }
  9.     }
  10.     return zahl;
  11. };

Die komt einfach auf die Hauptzeitleiste und wird so aufgerufen:
ActionScript:
  1. /*Auszug aus meinem Preloader*/
  2.  
  3. /* <-- Ausgabe kommt dann 3-stellig */
  4. this.kbIst.text = zahlRunden(this.bytes_kb_ist, 3)+" kBytes";
  5. /* <-- Ausgabe als Ganzzahl */
  6. this.kbSoll.text = zahlRunden(this.bytes_kb_soll, 0)+" kBytes";

So...nu viel Spass damit

Greetz Bananchen

Geändert von Bananchen (27-08-2005 um 22:05 Uhr)
Bananchen ist offline   Mit Zitat antworten
Alt 28-08-2005, 00:48   #2 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.324
ceil rundet immer ab. das ist für's runden nicht richtig
und zahlen sollten zahlen bleiben
trace(zahlRunden(-13.9678, 2)+5);

aber wenn schon text, dann sollten auch folgenullen ergänzt werden. das klappt bei deiner function leider nicht
trace(zahlRunden(7.3, 4));

alles nicht so einfach ;-)
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (28-08-2005 um 00:55 Uhr)
hgseib ist offline   Mit Zitat antworten
Alt 28-08-2005, 03:51   #3 (permalink)
Der Flasher...:D
 
Benutzerbild von Bananchen
 
Registriert seit: May 2005
Beiträge: 58
Joa...muss zugeben...ich hab des nur mit einstelligen Zahlen in Verbindung mit dem Preloader den ich bastel getestet. Da funktioniert des auch.
Die Zahl hat ja in diesem Falle dann kein Komma.
An die Möglchkeit, dass die Zahl schon ein Komma haben könnte und mehr Nullen brauch, habe ich gar nicht gedacht. Bin am basteln...
Bananchen ist offline   Mit Zitat antworten
Alt 28-08-2005, 04:44   #4 (permalink)
Der Flasher...:D
 
Benutzerbild von Bananchen
 
Registriert seit: May 2005
Beiträge: 58
ActionScript:
  1. _global.zahlRunden = function(zahl, stellen) {
  2.     faktor = Math.pow(10, stellen);
  3.     zahl = Math.round(zahl*faktor)/faktor;
  4.     neueZahl = zahl.toString();
  5.     if (stellen>0) {
  6.         kommastelle = neueZahl.indexOf(".");
  7.         nullen = faktor.toString().substr(1);
  8.         if (kommastelle == -1) {
  9.             /* wenn kein Komma */
  10.             neueZahl = neueZahl+"."+nullen;
  11.         } else {
  12.             /* wenn komma */
  13.             längeNachKomma = neueZahl.substr(kommastelle+1).length;
  14.             if (längeNachKomma<nullen.length) {
  15.                 /* wenn nachkommalänge kleiner stellen*/
  16.                 neueZahl = neueZahl+nullen.substr(0, (stellen-längeNachKomma));
  17.             }
  18.         }
  19.     }
  20.     /*wenn Parameter 3 = true, dann Zahl*/
  21.     if (arguments[2] == true) {
  22.         neueZahl = new Number(neueZahl);
  23.     }
  24.     return neueZahl;
  25. };

So, nu is alles da.....

ActionScript:
  1. trace(zahlRunden(7, 4));
  2.     /*7.0000*/
  3.     trace(zahlRunden(7.3, 4));
  4.     /*7.3000*/
  5.     trace(zahlRunden(7.33, 4));
  6.     /*7.3300*/
  7.     trace(zahlRunden(7.333, 4));
  8.     /*7.3330*/
  9.     trace(zahlRunden(7.3333, 4));
  10.     /*7.3333*/
  11.     trace(zahlRunden(7.54, 4, true)+0.5);
  12.     /*8.04*/

Wie man im letzte Bsp sieht....kommt ne zahl zurück,wenn der letzte Parameter "true" ist....
Bananchen ist offline   Mit Zitat antworten
Alt 28-08-2005, 11:42   #5 (permalink)
poke
 
Registriert seit: Dec 2002
Ort: Iserlohn [NRW]
Beiträge: 2.304
irgendwie sehr kompliziert.. In einer selbstgebauten Erweiterung der Math Klasse hab ich unter anderem diese Funktion eingebaut:

ActionScript:
  1. function rnd ( nNumber:Number, nDec:Number ):Number
  2. {
  3. nDec = ( nDec == undefined ? 0 : nDec );
  4.  
  5. return Math.round( nNumber * Math.pow( 10, nDec ) ) / Math.pow( 10, nDec );
  6. }

Verwendung:
ActionScript:
  1. // rnd( zahl, anzahl_stellen )
  2. trace( rnd( 14.623, 2 ) );

Die Funktion gibt ne Zahl zurück, deswegen werden auch keine 0 hinten angezeigt - ist ja schließlich ne Zahl.
pokepika ist offline   Mit Zitat antworten
Alt 28-08-2005, 11:52   #6 (permalink)
Nix Wisser
 
Benutzerbild von nullidee
 
Registriert seit: May 2003
Ort: Würzburg, Kleinstadt
Beiträge: 3.510
das schon gesehen?

Number.prototype.runden (round)
__________________
nullidee

Abakus GT 10² Kugeln - 80"Leinwand - CARAN D´ACHE SUPRACOLOR®
nullidee ist offline   Mit Zitat antworten
Alt 28-08-2005, 12:10   #7 (permalink)
tracer
 
Benutzerbild von andretti
 
Registriert seit: Jun 2004
Beiträge: 4.415
Zitat:
Zitat von hgseib
ceil rundet immer ab. das ist für's runden nicht richtig
sorry, hgseib: Math.ceil rundet auf und Math.floor rundet ab;
nur für Leute, die mitlesen und evt. Math.ceil falsch einsetzen.....
__________________
Viola per Sempre
Alle Angaben ohne Gewehr!
trace your open mind in variables !
andretti
ActionScript Dictionary
andretti ist offline   Mit Zitat antworten
Alt 28-08-2005, 18:40   #8 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.324
@andretti
da hat mich der type vom finanzamt doch schon wieder be... ;-)

@die anderen
und ätsch, ich hab noch eine viel bessere
http://www.seibsprogrammladen.de/fra...rithmen/String

ist aber unwichtig. Bananchen hat sich mühe gegeben und sogar die fehler selbst behoben!
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (28-08-2005 um 18:44 Uhr)
hgseib ist offline   Mit Zitat antworten
Alt 28-08-2005, 22:38   #9 (permalink)
Der Flasher...:D
 
Benutzerbild von Bananchen
 
Registriert seit: May 2005
Beiträge: 58
Zitat:
Zitat von hgseib
Bananchen hat sich mühe gegeben und sogar die fehler selbst behoben!
Danke....

nur:

Zitat:
Zitat von hgseib
aber wenn schon text, dann sollten auch folgenullen ergänzt werden. das klappt bei deiner function leider nicht trace(zahlRunden(7.3, 4));
is nu alles drin. Nullen anhängen und evtl als Zahl ausgeben.
Das einzige was noch fehlen würde wäre die festlegung des Typen:

ActionScript:
  1. _global.zahlRunden = function(zahl:Number, stellen:Number) {
  2. .
  3. .
  4. .
  5. }
Bananchen ist offline   Mit Zitat antworten
Alt 27-10-2005, 12:30   #10 (permalink)
thnkGodImAtheist
 
Benutzerbild von kurthurtig
 
Registriert seit: Nov 2003
Ort: kölle am rhing
Beiträge: 1.853
Zitat:
Zitat von andretti
sorry, hgseib: Math.ceil rundet auf und Math.floor rundet ab;
nur für Leute, die mitlesen und evt. Math.ceil falsch einsetzen.....
das kommt nich ernsthaft von ceiling (decke, also HOCH oben) und floor (Boden also unten (runter)?!?! und ich denk die ganze zeit, wo die namen herkommen... oh mannomann! *kopfschüttelUNDvordiestirnklatsch*
kurthurtig ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 14:19 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele