2015-02-08 20 views
3

讓我舉一個例子。將浮點數轉換爲至少包含一個小數位的字符串(javascript)

var a = 2.0; 
var stringA = "" + a; 

我將獲得:stringA = "2",但我想:stringA = "2.0"

我不想卻失去精度,因此,如果:

var b = 2.412; 
var stringB = "" + b; 

我想要得到的標準:stringB = "2.412"

這就是爲什麼toFixed()不會在這裏工作。是否有任何其他方式做到這一點,而不是明確檢查整數這樣?:

if (a % 1 === 0) 
    return "" + a + ".0"; 
else 
    return "" + a; 

回答

2

如果你想附加.0來輸出一個數字到字符串的轉換並保持非整數的精度,只需測試一個整數並專門對待它。

function toNumberString(num) { 
    if (Number.isInteger(num)) { 
    return num + ".0" 
    } else { 
    return num.toString(); 
    } 
} 

Input Output 
3  "3.0" 
3.4567 "3.4567" 
+0

這肯定比我建議的方式更清潔:)謝謝 – 2015-02-08 01:28:43

+0

我實際上不知道'isInteger()'或modulo是否是「更乾淨」,但兩者都是工作 - 底線是浮點值,您必須處理整數作爲某個特殊情況 – jdphenix 2015-02-08 01:30:15

3

如果你是做浮動

var a = 2.0; 
    var b = (a % 1 == 0) ? a + ".0" : a.toString(); 

編輯:添加引用,並更改爲允許。 0 http://www.w3schools.com/jsref/jsref_tostring_number.asp

+0

這不會解決問題。如果a = 2.0,我的字符串將是「2」,而不是「2.0」。 – 2015-02-08 01:27:53

+0

其實,我提出了同樣的問題(使用模數來檢查整數) – 2015-02-08 01:34:25

+0

是的,我回到你的答案,並據此作出決定。 – Asheliahut 2015-02-08 01:37:25

4

這裏有一個內置函數。

var a = 2; 
var b = a.toFixed(1); 

這將數字舍入到一位小數,並顯示它與那一個小數位,即使它是零。

0

對於其他人在關注這個問題,它只是發生在我身上,是爲浮點轉換爲字符串至少n小數,一個可以寫:

function toAtLeastNDecimalPlaces(num, n) { 
    normal_conv = num.toString(); 
    fixed_conv = num.toFixed(n); 
    return (fixed_conv.length > normal_conv.length ? fixed_conv : normal_conv); 
} 

注意的是,根據https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toFixedtoFixed()將工作在最多20個小數位。因此,上述功能將不適用於n > 20

此外,上述功能對科學記數法沒有任何特別的處理(但在這個線程中也沒有任何其他答案)。

相關問題