How to convert a binary fraction to decimal

Javascript has a parseInt() function that can help convert an integer in binary form to its decimal equivalent:

 parseInt("101", 2) // 5 

However, I need to convert the binary fraction to its decimal equivalent, for example:

 0.101 = 0.625 

I can write my own function, which would calculate the result as follows:

 1 * Math.pow(2, -1) + 0*Math.pow(2, -2) + 1*Math.pow(2, -3) // 0.625 

But I wonder if there is something standard already.

+7
javascript binary
source share
4 answers

You can divide the number (as a string) by a point and process the integer part with your own function, and the fraction part with another function for the correct value.

The solution works with other databases.

 function convert(v, base) { var parts = v.toString().split('.'); base = base || 2; return parseInt(parts[0], base) + (parts[1] || '').split('').reduceRight(function (r, a) { return (r + parseInt(a, base)) / base; }, 0); } document.write(convert(1100) + '<br>'); document.write(convert(0.0011) + '<br>'); document.write(convert(1100.0011) + '<br>'); document.write(convert('ABC', 16) + '<br>'); document.write(convert('0.DEF', 16) + '<br>'); document.write(convert('ABC.DEF', 16) + '<br>'); 
0
source share

But I wonder if there is something standard already.

No according to my knowledge

I think you need to create your own function:

  function toDecimal(string, radix) { radix = radix || 2; var s = string.split('.'); var decimal = parseInt(s[0], radix); if(s.length > 1){ var fract = s[1].split(''); for(var i = 0, div = radix; i < fract.length; i++, div = div * radix) { decimal = decimal + fract[i] / div; } } return decimal; } 
+1
source share

TL; DR :

 var convert = (S, B) => (parseInt((S = S.toString().trim().split("."))[0].replace("-", ""), (B = +B || 2)) + (S[1] || "").split("").reduceRight((s, b) => (s + parseInt(b, B)) / B, 0)) * (+(S[0][0] !== "-") || -1); 

Nina Scholz has a good example , but she does not work with negative numbers (plus other problems).
So this is an improved option:

 function convert(string, base) { string = string.toString().trim().split("."); base = +base || 2; return (parseInt(string[0].replace("-", ""), base) + (string[1] || "").split("").reduceRight((sum, bit) => (sum + parseInt(bit, base)) / base, 0)) * (+(string[0][0] !== "-") || -1); } convert(1100.0011); // -12.1875 convert(-1100.0011); // -12.1875 convert("-Z.ZZZ", 36); // -35.99997856652949 

As I know, JavaScript does not provide such built-in functions.

+1
source share

You can create a javascript extension method like parseInt , since I created a parseBinary method that only works with the parseInt link.

 String.prototype.parseBinary = function parseBinary() { var radix = 2; var s = this.split('.'); var decimal = parseInt(s[0], radix); if(s.length > 1){ var fract = s[1].split(''); for(var i = 0, div = radix; i < fract.length; i++, div = div * radix) { decimal = decimal + fract[i] / div; } } return decimal; }; 

To use this method, you can call it using the following code.

 var str = "0.101"; alert(str.parseBinary()); 

Here is a working javascript code example

 String.prototype.parseBinary = function parseBinary() { var radix = 2; var s = this.split('.'); var decimal = parseInt(s[0], radix); if(s.length > 1){ var fract = s[1].split(''); for(var i = 0, div = radix; i < fract.length; i++, div = div * radix) { decimal = decimal + fract[i] / div; } } return decimal; }; var str = "0.101"; alert(str.parseBinary()); 
0
source share

All Articles