js当中的toString使用问题

本文探讨了JavaScript中toString方法在处理不同类型数据时的运用,特别是浮点数的问题。当直接对数值调用toString(),如11.toString(),会引发错误。原因是数字后的点会被解析为小数点。此外,由于JavaScript的Number类型遵循IEEE754标准,0.1 + 0.2不等于0.3,这是由于二进制表示的精度问题。文章通过示例解释了浮点数转换为二进制的过程,并提供了一个用于计算二进制表示下浮点数相加的函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

toString使用中遇到的问题

js中的toString方法可以将不同类型的数据转换成字符串,当使用变量的形式调用toString方法的时候没有问题,但当直接将值作用与toString方法时候,像这样11.toString()会报错。

示例

console.log(11.toString());

在这里插入图片描述
这是因为整数后面的.会被识别为是小数值后面的. 等价于下面这种写法

console.log(11.0toString())

解决方式就是改变这个识别的问题

console.log(11 .toString())

在这里插入图片描述

浮点数的toString()

js当中的Number使用的是IEEE 754格式表示整数和浮点值。并且IEE 754的64位二进制中的后52位小数也会按照科学计数法来表示。对于二进制来说就是2的多少次方,小数点后面第一位就是2的-1次方。

0.112.toString(2)

在这里插入图片描述
简单理解就是

  • 0.112 * 2 = 0.224 不满足1 赋予0
  • 0.224 * 2 = 0.448 不满足1 赋予0
  • 0.448 * 2 = 0.896 不满足1赋予0
  • 0.896 * 2 = 1.792 满足1,所以二进制当中的小数点后面的第4位是1
  • 0.792 * 2 = 1.584 满足1,所以还是1
  • 0.584 * 2 = 1.168 满足1
  • 0.168 * 2 = 0.336 是0

对应的像其余进制,你可以理解为×这个对应进制来判断当前是不是0,然后对应的整数为就用对应的进制数进行表示。32位

0.1+0.2 不等于 0.3的原因

在这里插入图片描述
在这里插入图片描述

然后按照二进制进行运算(不考虑*进制操作中出现的无限循环以及位数限制)

0.1 - 0.0001100110011001100110011001100110011001100110011001101
	+
0.2 - 0.001100110011001100110011001100110011001100110011001101
    =
    - 0.0100110011001100110011001100110011001100110011001100111
const  test = (str) => {
    let strArr = str.split('.');
    let intNum = strArr[0].split('').reverse();
    let floatNum = strArr[1] ? strArr[1]: [];
    let intToatl = 0;
    let floatTotal = 0;
    for(let i = 0; i < intNum.length; i++){
        intToatl += intNum[i] * (2 ** i); 
            /*
                因为二进制1111的表示分别是
                1*2**3,
                1*2**2,
                1*2**1,
                1*2**0
            */
    };
    for(let i = 0; i < floatNum.length; i++){
        floatTotal += floatNum[i] * (2 ** -(i + 1));
        /*
            对于小数位的二进制,第一个就是*2后获取的值
        */
    }
    return intToatl + floatTotal;
}
console.log(test('0.0100110011001100110011001100110011001100110011001100111'));

在这里插入图片描述

### JavaScript 中 `toString` 方法的用法 在 JavaScript 中,`toString` 是一个内置方法,用于将对象转换为其字符串表示形式。此方法可以应用于多种数据类型,包括但不限于数字、数组和自定义对象。 #### 数字类型的 `toString` 对于数字类型,调用 `toString` 可以将其转换为字符串,并可以选择指定基数(即进制)。如果未提供基数,默认情况下会返回十进制字符串[^1]。 ```javascript let number = 255; console.log(number.toString()); // 输出 "255" console.log(number.toString(16)); // 输出 "ff" (十六进制) ``` #### 数组类型的 `toString` 当 `toString` 应用于数组时,它会将数组中的每个元素转换为字符串并用逗号分隔它们[^2]。 ```javascript let array = [1, 2, 3]; console.log(array.toString()); // 输出 "1,2,3" ``` #### 自定义对象上的 `toString` 默认情况下,调用自定义对象的 `toString` 方法会返回 `[object Object]`。然而,可以通过重写该方法来自定义其行为。 ```javascript let book = { name: "The Principles of Object-Oriented JavaScript", year: 2014, toString: function() { return this.name + ' (' + this.year + ')'; } }; console.log(book.toString()); // 输出 "The Principles of Object-Oriented JavaScript (2014)" ``` #### 解析器上下文中使用 `toString` 某些解析工具可能允许通过评估表达式的 AST 来分析代码结构,在这种场景下也可以利用 `toString` 将复杂的数据结构转回原始字符串形式[^3]。 ```javascript // 假设我们有一个 JSON 数据被解析成某种内部结构 let parsedData = require('esprima').parse("var a = 1"); console.log(parsedData.body[0].declarations[0].init.value); // 输出 "1" // 如果需要恢复原样,则可尝试重新构建或直接操作源码字符串 console.log("var a = 1".toString()); // 输出 "var a = 1" ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值