2011-10-21 45 views
0

這種方法給我錯誤的值,爲什麼?結果必須是5.088100,但它給我5.o88100的任何值。如果在十進制點之後的第一個數字是零,那麼它將刪除它,爲什麼?小數點後不賦值

var precision = descriptor.digits ? descriptor.digits[1] : 2; 

var int_part = Math.floor(value); 

var dec_part = Math.abs(Math.floor((value % 1) * Math.pow(10, precision))); 
+3

字母'o'從哪裏來?你只使用數學函數... – pimvdb

+1

我完全不理解你的問題。請認真閱讀更多的代碼,或許是您引用的確切示例?你似乎暗示有東西將'5.088100'變成'5.o88100'?那麼有什麼東西正在替代'o'的'0'? –

+0

ry它是輸入錯誤。沒有任何沒有(0)或沒有(o)。 –

回答

3

因爲你小數點後轉動部分轉化爲整數,所以08成爲8 —就像var dec_part = 08會給你8

如果你想在小數部分使用字符串操作:

var tmp = value.toFixed(precision).split("."), 
    int_part = tmp[0], 
    dec_part = tmp[1]; 
1
如果你對待 dec_part爲數字,如果絕對清楚的是,前面的零被DROP掉掉

。數字不能也不能有前導零。

你真正要做的是獲得兩個部分組成的字符串,至極很多更簡單。使用split()

var parts = value.split("."); 
var int_part = parts[0], 
var dec_part = parts[1]; 

但至少,如果你只是想你value舍入到一個特定的精確度,你可以放棄那些複雜的東西,並使用toFixed()

value = value.toFixed(precision);