2
var a = (123.456).toString(36) //"3f.gez4w97ry0a18ymf6qadcxr"
toString(36)的對面嗎?
現在,我該如何恢復到使用該字符串的原始數字?
注意:parseInt(number,36)
只適用於整數。
var a = (123.456).toString(36) //"3f.gez4w97ry0a18ymf6qadcxr"
toString(36)的對面嗎?
現在,我該如何恢復到使用該字符串的原始數字?
注意:parseInt(number,36)
只適用於整數。
你可以嘗試解析整數與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
+1這是一個偉大的答案。值得注意的是,由於舍入誤差,這可能會產生意想不到的結果。嘗試使用'.1'的值和'3'的一個基數,例如:'parseFloatInBase((。1).toString(3),3)'...所以謹慎使用並認識到,如果您要轉換兩種方式你可能不會總是拿回相同的號碼。 –
我還加了'if(nums.length === 1)返回iPart;'以防止錯誤,如果字符串只有一個整數部分。 (例如:「123」) – RainingChain