2017-03-12 36 views
0

我有一個簡單的問題需要解決,我有一個包含雙精度的變量,我正在讀取另一個來自用戶輸入的double。我需要將這兩個數字相加並將結果輸出到屏幕上。在我工作過的其他語言中,只有它是雙精度的這一事實會導致它用小數打印,即使它是整數。在Javascript中,情況並非如此。在沒有四捨五入的情況下在Javascript中打印整數作爲小數點

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

我可以強制使用toFixed()打印一個小數,但隨後它會圓其他輸入的結果。如果結果是2.0,我希望它打印「2.0」,如果結果是2.345,我希望它打印「2.345」。

的解決方案,我現在所擁有的是將其轉換爲字符串,如果它是一個整數:

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

我覺得必須有一些更好的方式來做到這一點。這對我來說似乎很笨拙。我一直在尋找解決方案,但到目前爲止我發現的所有東西都使用toFixed()或其他四捨五入。

+0

JavaScript只有一種類型的數字,所以一切都是雙重的。它不關心它是否是整數;你必須手動進行格式設置。 – Tashi

+0

在JavaScript中,不存在小數或雙精度等。一切都是一個數字,這是相當混亂(而不是在大多數語言) – dirkk

回答

1

我覺得更數-Y的解決辦法是:

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

僅供參考 - 你需要一個[polyfill](https://developer.mozilla.org/en-US/docs/Web/JavaScript/參考/ Global_Objects/Number/isInteger#Polyfill)爲'Number.isInteger'如果你想支持Internet Explorer - –

0

試試這個:

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 

你必須決定的小數位數。現實點。例如對於財務問題,2位小數就可以。在這種情況下將第2行更改爲:

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

這可以正常工作。 在我的情況下,我收到表單上的輸入。輸入可以是整數或小數。但是,處理時,每個輸入都被視爲十進制。

+0

這是行不通的。輸出是2,而不是2.0。 – RaneWrites