2017-03-12 4 views
0

Ich habe ein einfaches Problem zu lösen, ich habe eine Variable mit einem Doppel, ich lese in einem anderen Doppel von Benutzereingabe. Ich muss die beiden Zahlen addieren und das Ergebnis auf den Bildschirm drucken. In anderen Sprachen, in denen ich gearbeitet habe, würde die Tatsache, dass es ein Doppel war, dazu führen, dass es mit einer Dezimalzahl gedruckt wird, auch wenn es eine ganze Zahl ist. In Javascript ist dies nicht der Fall.Drucken einer ganzen Zahl als Dezimal in Javascript ohne Rundung

var d = 2.0; 
console.log(d) // out is 2 

Ich kann es zwingen, eine Dezimalzahl zu drucken, indem toFixed() verwenden, aber dann wird es gehen Ergebnisse anderen Eingang runden. Wenn das Ergebnis 2.0 ist, möchte ich, dass es "2.0" druckt und wenn das Ergebnis 2.345 ist, möchte ich, dass es "2.345" druckt.

Die Lösung, die ich jetzt habe, ist es in eine Zeichenfolge zu konvertieren, wenn es sich um eine ganze Zahl ist:

var d2 = 4.0 
console.log((d2 % 1 == 0) ? d2+".0" : d2) // out is 4.0 

Ich mag es fühlen muss eine bessere Möglichkeit, dies zu tun. Das erscheint mir sehr klobig. Ich habe nach Lösungen gesucht, aber alles, was ich bis jetzt gefunden habe, verwendet oder eine andere Rundung.

+0

JavaScript hat nur eine Art von Nummer, also ist alles ein Doppel. Es ist egal, ob es eine ganze Zahl ist; Sie müssen Ihre Formatierung manuell vornehmen. – Tashi

+0

In JavaScript gibt es weder Dezimal noch Double. Alles ist eine Nummer, was ziemlich verwirrend ist (und ziemlich anders als in den meisten Sprachen) – dirkk

Antwort

1

Ich denke, eine weitere Nummer-y Lösung sein könnte:

var d = 4.0 
var ds = Number.isInteger(d) ? d.toPrecision(2) : d.toString(); 
console.log(ds) 
+1

FYI - du brauchst ein [polyfill] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/ Referenz/Global_Objects/Number/isInteger # Polyfill) für 'Number.isInteger' wenn Sie den Internet Explorer unterstützen wollen - –

0

Try this:

var d = 2.0; 
var parsD = parseFloat(d); //you have to parse d either as Float or Integer 
console.log(parsD) // out will be in decimal without rounding up 

Sie die Anzahl der Dezimalstellen zu entscheiden. Sei realistisch. z.B. Für finanzielle Probleme sind 2 Dezimalstellen nur OK. In diesem Fall ändern Sie Zeile 2 zu:

var parsD = parseFloat(d).toFixed(n) //where n is an integer & number of decimals 

Das funktioniert gut. In meinem Fall erhalte ich eine Eingabe auf einem Formular. Die Eingabe kann Ganzzahl oder Dezimal sein. Bei der Verarbeitung wird jedoch jede Eingabe als Dezimalzahl behandelt.

+0

Das funktioniert nicht. Die Ausgabe ist 2, nicht 2.0. – RaneWrites

Verwandte Themen