2012-03-14 22 views
2

我想基於變量具有的任何十進制值創建一個新變量。將一個值的小數位分隔爲一個新變量(例如:從值「3.6」中獲得「0.6」)

即:

myValue = 3.6 

function twoNewVars{...} 

newVar1 = 3 
newVar2 = 0.6 

使用jQuery或JavaScript。 只需要尋找「。」的位置就可以分裂嗎?

也許把數字「3.6」當作一個文字字符串,然後將其分開......但這看起來有點亂,希望有一個更優雅的方式來做到這一點。 (注意:根本不需要理解這個問題 - 我需要這個以便以更清晰的方式在頁面上定位元素。我的視口高度可以是任何東西,然後是基於固定的內容高度,如果我能找到的重複內容的固定高度和視口的任意高度之間的差異,我可以自動定位的東西乾淨地切割)

回答

6

您可以使用原始數字和最接近零之間的差值。

但是,Javascript沒有提供將「最接近零值」的方法。這增加了該方法:

// return integer part - may be negative 
Math.trunc = function(n) { 
    return (n < 0) ? Math.ceil(n) : Math.floor(n); 
} 

您可以使用它來獲得小數部分。請注意,如果您提供負數,那麼結果也將爲負數。

// return fraction part 
Math.frac = function(n) { 
    return n - Math.trunc(n); 
} 

的C99庫具有modf函數給出的兩個以上的功能可以由此仿真:

Math.modf = function(n) { 
    return [Math.trunc(n), Math.frac(n)]; 
} 

即,它返回一個包含整數部分的陣列,然後將小數部分。

2

這應該這樣做:

var myValue = 3.6; 

function twoNewVars(){ 
    var newVar1 = Math.floor(3.6), 
     newVar2 = (myValue - Math.floor(myValue)).toFixed(1); 
} 

或使函數返回一個對象文字,如果你想查看變量:

function twoNewVars(){ 
    return { 
     newVar1: Math.floor(3.6), 
     newVar2: (myValue - Math.floor(myValue)).toFixed(1) 
    }; 
} 

twoNewVars().newVar1; 
twoNewVars().newVar2; 
+0

由於功能範圍的限制,函數內部生成的兩個值在函數外面是不可見的嗎? – 2012-03-14 16:04:55

+0

@JasonSperske是的,他們會隱形的。 – Alnitak 2012-03-14 16:19:39

+0

是的,他們會因爲他們在功能範圍內。還有什麼可以做的是使函數返回一個對象文字。檢查答案 – Shaoz 2012-03-14 16:30:52

1

由於浮點數,大多數小數不會返回您所期望的數字。例如,

3.6-3返回0.6000000000000001。

您可以繁殖,輪數,或使用toFixed並且將其轉換成一個數字:

Number.prototype.decimalpart= function(sig){ 
    sig= sig || 12; 
    return +((this%1).toFixed(sig)); 
} 
3.6.decimalpart()>>0.6 

將字符串分割可能更簡單。

相關問題