2014-01-08 52 views

回答

10

你可以嘗試解析整數與parseInt單獨浮動部分,因爲parseFloat不支持基數:

function parseFloatInBase(n, radix) { 
    var nums = n.split(".") 

    // get the part before the decimal point 
    var iPart = parseInt(nums[0], radix) 
    // get the part after the decimal point 
    var fPart = parseInt(nums[1], radix)/Math.pow(radix, nums[1].length) 

    return iPart + fPart 
} 

// this will log 123.456: 
console.log(parseFloatInBase("3f.gez4w97ry0a18ymf6qadcxr", 36)) 

我被radix^numLength劃分,因爲我基本上是移動小數點超過numLength空間。你可以這樣做,就像在數學課上,因爲你知道10個移動小數點分隔了一個空間,因爲大部分的數學是在底座10例:

123456/10/10/10 = 123.456 

這相當於

123456/(10 * 10 * 10) = 123.456 

也因此

123456/(10^3) = 123.456 
+0

+1這是一個偉大的答案。值得注意的是,由於舍入誤差,這可能會產生意想不到的結果。嘗試使用'.1'的值和'3'的一個基數,例如:'parseFloatInBase((。1).toString(3),3)'...所以謹慎使用並認識到,如果您要轉換兩種方式你可能不會總是拿回相同的號碼。 –

+0

我還加了'if(nums.length === 1)返回iPart;'以防止錯誤,如果字符串只有一個整數部分。 (例如:「123」) – RainingChain