2012-05-31 30 views
0

我如何分割十進制數?變量bidnumber10.70分割不起作用

var bidnumber = $(this).parent('div').siblings('.advert-details').find('tr:eq(3)').find('.advert-details-col-2').attr('data-bid'); 
bidnumber.toString().split('.'); 
var first = bidnumber[0]; 
var second = bidnumber[1]; 
alert(bidnumber[0]); 
second.substr(0, 1); 
var finalnumber = first + '.' + second; 

當我提醒bid[0],應該提醒10 ..相反1被驚動。我不明白我出錯的地方?

+0

分裂的輸入工作得很好 - http://jsfiddle.net/dLPj3/ –

+0

你有要存儲拆分方法的結果,它不適用。 –

+0

如果你想要整數部分,只要'Math.floor(bidnumber)'。如果你想要分數,請執行'bidnumber%1'。如果你實際上想同時在一個數組中,那麼''Math.floor(bidnumber),bidnumber%1''更容易。 – Fuser97381

回答

9

你忘了數組從split函數返回回:

bidnumber = bidnumber.toString().split('.'); 
1
  • 屬性值已經是一個字符串,所以你不必把它轉換爲字符串。
  • split方法不會將數組放回變量中。
  • substr方法不會將新字符串放回到變量中。

所以:

bidnumber = bidnumber.split('.'); 
var first = bidnumber[0]; 
var second = bidnumber[1]; 
second = second.substr(0, 1); 
var finalnumber = first + '.' + second; 

或者只是:

bidnumber = bidnumber.split('.'); 
bidnumber[1] = bidnumber[1].substr(0, 1); 
var finalnumber = bidnumber.join('.'); 

考慮也解析字符串號碼,並圍着它

var finalnumber = Math.round(parseFloat(bidnumber) * 10)/10; 
1

你不應該使用split拆分數字的整數和小數部分。

例如,當10.70分裂(和轉換70美分)會給出不同的答案,10.7即使他們是相同

var bidnumber = 10.70;  // ignoring your DOM query for now 

var whole = ~~bidnumber; // quick and nasty 'truncate' operator 
var cents = 100 * Math.abs(bidnumber - whole); 

即使原始數字爲負值,最後一行確保分數爲正。

~~運算符實際上是~運算符的兩個實例,它是一個按位「非」運算符,它將任何數字截斷爲32位有符號值,從而丟棄任何小數部分。翻轉兩次給出原始數字,但沒有分數。

這是獲得「向零舍入」的結果最簡單的方法,爲Math.floor()實際上給-11-10.70

+0

對於小數部分,取其餘的mod 1:'bidnumber%1'。 – Fuser97381

+0

@ user973810 Math.floor()對於負數不能正常工作,正如我的重疊編輯中所解釋的。 – Alnitak

+0

@ user973810,也不是'n%1' - 你得到一個負數 – Alnitak