Frage zum Wiki-Artikel ‚JavaScript‘
Humanic
- javascript
Ich habe eine kurze und hoffentlich einfach umzusetzende Frage.
Und zwar habe ich eine Kommazahl und möchte nur die Länge der Ganzzahl daraus haben.
D.h. die Zahl ist z.B. 142,14547 und ich möchte, dass später die Zahl "3" ausgegeben wird. Probiert habe ich das ganze schon, die Zahl mit parseFloat umzuwandeln, und anschließend aus diesem Variablenwert mit ".length" die Länge herauszubekommen, tja... und da ist das Problem... statt die Länge des Variablenwertes zu nehmen, nutzt ".length" den Variablennamen!
kann mir jmd behilflich sein?
LG
Liebe(r) Humanic,
Probiert habe ich das ganze schon, die Zahl mit parseFloat umzuwandeln, und anschließend aus diesem Variablenwert mit ".length" die Länge herauszubekommen, tja... und da ist das Problem... statt die Länge des Variablenwertes zu nehmen, nutzt ".length" den Variablennamen!
Code?
Liebe Grüße,
Felix Riesterer.
Liebe(r) Felix,
Code?
will mal nicht so sein: parseFloat("142,14547").toString().length
Liebe Grüße,
Felix Riesterer.
Hallo,
will mal nicht so sein:
parseFloat("142,14547").toString().length
Wobei hier parseFloat
nur zufällig das richtige Ergebnis im Sinne der Aufgabe erzeugt!
Gruß
Kalk
Liebe(r) Humanic,
Probiert habe ich das ganze schon, die Zahl mit parseFloat umzuwandeln, und anschließend aus diesem Variablenwert mit ".length" die Länge herauszubekommen, tja... und da ist das Problem... statt die Länge des Variablenwertes zu nehmen, nutzt ".length" den Variablennamen!
Code?
Liebe Grüße,
Felix Riesterer.
function nachkommastellenermitteln(nachkommastellevalue) {
varlaengezahl = parseFloat(nachkommastellevalue);
laengezahl = toString(varlaengezahl).length;
console.log(nachkommastellevalue);
console.log(varlaengezahl);
console.log(laengezahl);
}
das problem hierbei ist jedoch, dass wenn Nachkommastellevalue = 102,1457 ist, dass langezahl = 18 ist, ich möchte aber, dass laengezahl eben 3 ist (durch "102" bedingt)
@@Humanic
Und zwar habe ich eine Kommazahl und möchte nur die Länge der Ganzzahl daraus haben.
Der Logarithmus ist dein Freund. Und da es um Zahlen im Dezimalsystem geht, der Logarithmus zur Basis 10.
Probiert habe ich das ganze schon, die Zahl mit parseFloat umzuwandeln
Das wird wohl nichts. parseFloat()
wandelt einen String in eine Zahl um, nicht andersrum.
Aber wie gesagt, die Umwandlung in eine Zeichenkette ist nicht das Mittel der Wahl.
LLAP 🖖
sh:) fo:} ch:? rl:) br:> n4:& va:| de:> zu:} fl:{ ss:| ls:# js:|
Hallo,
Und zwar habe ich eine Kommazahl und möchte nur die Länge der Ganzzahl daraus haben.
also die Anzahl der Vorkommastellen? Dann ist der dekadische Logarithmus (also der Logarithmus zur Basis 10) das Mittel der Wahl. Der ist nämlich immer um 1 weniger als die Stellenzahl, solange das Argument positiv und größer oder gleich 1 ist.
Also:
var stellen = Math.floor(Math.log(x) / Math.LN10) + 1;
Wie gesagt: Für Werte kleiner 1 gilt das nicht mehr, aber das kratzt dich vermutlich nicht.
Probiert habe ich das ganze schon, die Zahl mit parseFloat umzuwandeln, und anschließend aus diesem Variablenwert mit ".length" die Länge herauszubekommen, tja... und da ist das Problem... statt die Länge des Variablenwertes zu nehmen, nutzt ".length" den Variablennamen!
Äh, nö. Ich bin mir ziemlich sicher, dass du hier die falschen Schlüsse ziehst.
So long,
Martin
@@Der Martin
var stellen = Math.floor(Math.log(x) / Math.LN10) + 1;
Hach, dass die Leute immer gleich die fertige Lösung rausposaunen müssen!
Math.log(x) / Math.LN10
ist aber doch ein bisschen zu kompliziert; Math.log10(x)
exitiert.
Wie gesagt: Für Werte kleiner 1 gilt das nicht mehr, aber das kratzt dich vermutlich nicht.
Vor allem für Werte kleiner 0 nicht. Und das dürfte kratzen. Das sollte man vorher abfangen.
LLAP 🖖
sh:) fo:} ch:? rl:) br:> n4:& va:| de:> zu:} fl:{ ss:| ls:# js:|
n'Abend,
var stellen = Math.floor(Math.log(x) / Math.LN10) + 1;
Hach, dass die Leute immer gleich die fertige Lösung rausposaunen müssen!
ja, manchmal blubbert es einfach so aus mir raus ... *rülps* ;-)
Math.log(x) / Math.LN10
ist aber doch ein bisschen zu kompliziert;Math.log10(x)
exitiert.
Oh, cool. Das wusste ich noch nicht.
Wie gesagt: Für Werte kleiner 1 gilt das nicht mehr, aber das kratzt dich vermutlich nicht.
Vor allem für Werte kleiner 0 nicht. Und das dürfte kratzen. Das sollte man vorher abfangen.
Wieso abfragen? Es gibt doch Math.abs(). Aber angesichts der Fragestellung habe ich vermutet, dass der Fall sowieso nicht relevant ist,
So long,
Martin
@@Der Martin
Hach, dass die Leute immer gleich die fertige Lösung rausposaunen müssen!
ja, manchmal blubbert es einfach so aus mir raus ... *rülps* ;-)
Passiert mir wohl auch manchmal. Das wäre aber für Humanic eine Gelegenheit gewesen, seine Kenntnisse zum Logarithmus wieder aufzufrischen.
Vor allem für Werte kleiner 0 nicht. Und das dürfte kratzen. Das sollte man vorher abfangen.
Wieso abfragen?
Ich sagte nicht „abfragen“.
LLAP 🖖
sh:) fo:} ch:? rl:) br:> n4:& va:| de:> zu:} fl:{ ss:| ls:# js:|
Hi,
Vor allem für Werte kleiner 0 nicht. Und das dürfte kratzen. Das sollte man vorher abfangen.
Wieso abfragen?
Ich sagte nicht „abfragen“.
oh ... das war die Simultan-Autokorrektur beim Lesen. Die ist auch nicht vollkommen. Aber manchmal vollkommen überraschend.
Ciao,
Martin
Hallo Der Martin,
Vor allem für Werte kleiner 0 nicht. Und das dürfte kratzen. Das sollte man vorher abfangen.
Wieso abfragen? Es gibt doch Math.abs().
Damit wäre es ja abgefangen ;-)
Aber angesichts der Fragestellung habe ich vermutet, dass der Fall sowieso nicht relevant ist,
„Ich habe eine Kommazahl“?? Die kann doch auch negativ sein?
Bis demnächst
Matthias
[Vollzitat entfernt]
ach hätte ich doch damals während der Schulzeit in Mathe bei Logarithmus besser aufgepasst.... danke an alle, für die Lösung! Es funktioniert :)
Hallo Der Martin,
also die Anzahl der Vorkommastellen? Dann ist der dekadische Logarithmus (also der Logarithmus zur Basis 10) das Mittel der Wahl. Der ist nämlich immer um 1 weniger als die Stellenzahl, solange das Argument positiv und größer oder gleich 1 ist.
Die Formulierung stimmt so nicht.
Es wird impliziert, dass der Logarithmus immer eine natürliche Zahl ist. Du meinst den ganzzahligen Anteil des Logarithmus.
parseInt(Math.log10(Math.abs(x))) + 1
sollte für alle Varianten das richtige Ergebnis liefern:
console.log(parseInt(Math.log10(Math.abs( 5.5))) + 1) // 1
console.log(parseInt(Math.log10(Math.abs( 0.5))) + 1) // 1
console.log(parseInt(Math.log10(Math.abs( -0.5))) + 1) // 1
console.log(parseInt(Math.log10(Math.abs( -5.5))) + 1) // 1
console.log(parseInt(Math.log10(Math.abs(-15.5))) + 1) // 2
Bis demnächst
Matthias
Moin,
also die Anzahl der Vorkommastellen? Dann ist der dekadische Logarithmus (also der Logarithmus zur Basis 10) das Mittel der Wahl. Der ist nämlich immer um 1 weniger als die Stellenzahl, solange das Argument positiv und größer oder gleich 1 ist.
Die Formulierung stimmt so nicht.
Es wird impliziert, dass der Logarithmus immer eine natürliche Zahl ist. Du meinst den ganzzahligen Anteil des Logarithmus.
logisch, das sollte beim Begriff "Anzahl der Stellen" eigentlich klar sein. Und deswegen hatte ich dem Code-Beispiel ja auch einen Fußboden spendiert.
parseInt(Math.log10(Math.abs(x))) + 1
sollte für alle Varianten das richtige Ergebnis liefern:
Außer für abs(x)<1, aber dann muss man sich sowieso fragen, wie man die Zahl der Vorkommastellen definieren möchte. Grundsätzlich 1? Wäre zwar richtig, aber nicht unbedingt nützlich. Da kommt es darauf an, wozu man diesen Wert verwenden will.
Ich hatte diese Aufgabenstellung schon oft, um herauszubekommen, in welcher Größenordnung ein Wert liegt, also ob Millionen, Tausende oder gar Hundertstel. Dann wären auch die begativen Werte, die die genannte Formel für x<1 liefert, noch sinnvoll.
So long,
Martin
Hallo Martin,
Außer für abs(x)<1,
ich glaube, dieser Fall wird definitionsgemäß nie eintreten :)
Gruß
Jürgen
Hallo JürgenB,
Außer für abs(x)<1,
ich glaube, dieser Fall wird definitionsgemäß nie eintreten :)
Ähem. Hat die Autokorrektur da eine Null hingezaubert?
Bis demnächst
Matthias
Hallo Matthias,
Außer für abs(x)<1,
ich glaube, dieser Fall wird definitionsgemäß nie eintreten :)
Ähem. Hat die Autokorrektur da eine Null hingezaubert?
ja, in meinem Kopf :(. Ich glaube, ich muss zum wachwerden erst mal ein bischen arbeiten …
Gruß
Jürgen
Hallo JürgenB,
Außer für abs(x)<1,
ich glaube, dieser Fall wird definitionsgemäß nie eintreten :)
Ähem. Hat die Autokorrektur da eine Null hingezaubert?
ja, in meinem Kopf :(.
Tröste dich, ich wollte auch dasselbe schreiben ;-)
Ich glaube, ich muss zum wachwerden erst mal ein bischen arbeiten …
Bis demnächst
Matthias
@@Der Martin
begativen
Sie meinten: vegetativ?
LLAP 🖖
sh:) fo:} ch:? rl:) br:> n4:& va:| de:> zu:} fl:{ ss:| ls:# js:|
Hallo Matthias,
console.log(parseInt(Math.log10(Math.abs( 5.5))) + 1) // 1 console.log(parseInt(Math.log10(Math.abs( 0.5))) + 1) // 1 console.log(parseInt(Math.log10(Math.abs( -0.5))) + 1) // 1 console.log(parseInt(Math.log10(Math.abs( -5.5))) + 1) // 1 console.log(parseInt(Math.log10(Math.abs(-15.5))) + 1) // 2
probier mal
console.log(parseInt(Math.log10(Math.abs( 0.05))) + 1);
ich denke, abs reicht nicht, man sollte schon >=1 abfragen.
Gruß
Jürgen
Hallo JürgenB,
probier mal
console.log(parseInt(Math.log10(Math.abs( 0.05))) + 1);
Brauch ich nicht <stirnklatsch>
ich denke, abs reicht nicht, man sollte schon >=1 abfragen.
In der Tat.
Bis demnächst
Matthias
@@Matthias Apsel
parseInt(Math.log10(Math.abs(x))) + 1
Wieso parseInt()
, wenn das Argument schon eine Zahl ist? Math.floor()
sollte es tun.
LLAP 🖖
sh:) fo:} ch:? rl:) br:> n4:& va:| de:> zu:} fl:{ ss:| ls:# js:|