js 进制转换(toString() 、 parseInt() 、String.format封装)

js 任意进制转换方法如下:

一、JavaScript toString() 方法

1、定义和用法

数字的字符串表示。例如,当 radix 为 2 时,NumberObject 会被转换为二进制值表示的字符串。

2、语法

number.toString(radix)

3、参数值

参数 描述
radix 可选。规定表示数字的基数,是 2 ~ 36 之间的整数。若省略该参数,则使用基数 10。但是要注意,如果该参数是 10 以外的其他值,则 ECMAScript 标准允许实现返回任意值。
  • 2 - 数字以二进制值显示
  • 8 - 数字以八进制值显示
  • 16 - 数字以十六进制值显示

4、返回值

类型 描述
String 把数字转换为字符串

5、示例: 

var count = 10;

console.log(count.toString());    // 输出 '10'
console.log((17).toString());     // 输出 '17'
console.log((17.2).toString());   // 输出 '17.2'

var x = 12;

console.log(x.toString(2));       // 输出 '1100'      10进制转2进制
console.log((254).toString(16));  // 输出 'fe'        10进制转16进制

console.log((10).toString(8));   // 输出 '12'         10进制转8进制
console.log((-0xff).toString(2)); // 输出 '-11111111' 16进制转2进制

二、JavaScript parseInt() 函数

1、定义和用法

parseInt() 函数可解析一个字符串,并返回一个整数。

当参数 radix 的值为 0,或没有设置该参数时,parseInt() 会根据 string 来判断数字的基数。

当忽略参数 radix , JavaScript 默认数字的基数如下:

  • 如果 string 以 "0x" 开头,parseInt() 会把 string 的其余部分解析为十六进制的整数。
  • 如果 string 以 0 开头,那么 ECMAScript v3 允许 parseInt() 的一个实现把其后的字符解析为八进制或十六进制的数字。
  • 如果 string 以 1 ~ 9 的数字开头,parseInt() 将把它解析为十进制的整数。

2、语法

parseInt(string, radix)

参数 描述
string 必需。要被解析的字符串。
radix 可选。表示要解析的数字的基数。该值介于 2 ~ 36 之间。

 3、示例:

//一个参数
parseInt("10");           // 10
parseInt("10.33");        // 10
parseInt("34 45 66");     // 34
parseInt(" 60 ");         // 60
parseInt("40 years");     // 40
parseInt("He was 40");    // NaN

//两个参数
parseInt('123', 8)        // 83   将'123'看作8进制数,返回十进制数83
parseInt("Hello", 8);     // NaN  根本就不是数值
parseInt("546", 2);       // NaN  除了“0、1”外,其它数字都不是有效二进制数字
parseInt("10",10);        // 10
parseInt("10",8);         // 8
parseInt("0x10");         // 16   将'0x10'看作16进制数,返回十进制数16
parseInt("10",16);        // 16   将'10'看作16进制数,返回十进制数16
parseInt("010");          // 10    注意:旧浏览器由于使用旧版本的ECMAScript(ECMAScript版本小于ECMAScript 5,当字符串以"0"开头时默认使用八进制,ECMAScript 5使用的是十进制),所以在解析("010") 将输出8。

三、封装js  String.format() 方法

    var re = /%(?:(\d)?(\d)?(?:\.(\d+))?|\(([^)]+)\))([%bcdufosSxX])/g;

    var dispatch = function (data) {
        if (data.length == 1 && typeof data[0] == 'object') {
            data = data[0];
            return function (match, w, b, p, lbl, fmt, off, str) {
                return formats[fmt](data[lbl]);
            };
        } else {
            var idx = 0;
            return function (match, w, b, p, lbl, fmt, off, str) {
                return formats[fmt](data[idx++], p, w, b);
            };
        }
    };

    String.format = function () {
        var as = [].slice.call(arguments), fmt = as.shift()
        var s = "";
        for (var i = 0; i < arguments.length; i++) {
            s += arguments[i] + ",";
            if (i == 0) {
                fmt = arguments[0];
            } else {
                as[i - 1] = arguments[i];
            }
        }
        return fmt.replace(re, dispatch(as));
    }

    var formats = {
        '%': function (val) {
            return '%';
        },
        'b': function (val) {
            return parseInt(val, 10).toString(2);
        },
        'c': function (val) {
            return String.fromCharCode(parseInt(val, 10));
        },
        'd': function (val) {
            return parseInt(val, 10) ? parseInt(val, 10) : 0;
        },
        'u': function (val) {
            return Math.abs(val);
        },
        'f': function (val, p) {
            return (p > -1) ? Math.round(parseFloat(val) * Math.pow(10, p)) / Math.pow(10, p) : parseFloat(val);
        },
        'o': function (val) {
            return parseInt(val, 10).toString(8);
        },
        's': function (val) {
            return val;
        },
        'S': function (val, p) {
            var len = p - val.toString().length;
            for (i = 0; i < len; i++) val = '0' + val;
            return val;
        },
        //'x': function(val) { return ('' + parseInt(val, 10).toString(16)).toLowerCase(); },
        //'X': function(val) { return ('' + parseInt(val, 10).toString(16)).toUpperCase(); }

        'x': function (val, p, a, b) {
            var s = b ? new Array(b - 0 + 1).join(a || '') : '';
            s += parseInt(val, 10).toString(16);
            var ret = b ? s.slice(b * -1) : s;
            return ret.toLowerCase();
        },
        'X': function (val, p, a, b) {
            var s = b ? new Array(b - 0 + 1).join(a || '') : '';
            s += parseInt(val, 10).toString(16);
            var ret = b ? s.slice(b * -1) : s;
            return ret.toUpperCase();
        }
    };

调用:

String.format("%02X", 10);  // "0A"       10进制转16进制

String.format("%d", 0x100); // "256"      16进制转10进制

String.format("%b", 100);   // "1100100"  10进制转2进制

String.format("%o", 100);   // "144"      10进制转8进制 

...

猜你喜欢

转载自blog.csdn.net/qq_40015157/article/details/113848745