在JSA中,如何把数据格式转成数字?

在JSA中,如何把数据格式转成数字?

提问人: 拉小登Dony

单元格中保存了两个数字,A2单元格的数字是文本格式。

使用JSA求这两个数字的和,代码如下:

执行结果却是12,不是3,为什么?

回答人: 拉小登老师

因为A2单元格是文本类型的数字,在JSA中文本+数字=文本。

所以在求和计算之前,需要先把文本转换成数字,有下面几种方法:

1- 方法1,加号

在文本数字前面输入一个+,可以把文本转成数字。代码如下:

 

2- 方法2:parseInt

把文本转换成整数类型。代码如下:

如果数字包含小数,则用parseFloat

3- 方法3:Math.floor

返回小于数值的最大数字,即向下取整。代码如下:

4- 方法4:两个波浪线

在 ECMAScript 6 中,~~ 的等价物是 Math.trunc:

注意,单元格是空白

但是,如果文本是空白单元格,以上3个方法都会错误。

只有第4个方法能正常计算

注意,单元格包含字母

如果文本是包含非数字的字符,只有方法2,会正常的计算。

计算结果如下:

方法4,会忽略文本单元格进行计算。

 

在JSA中,两个波浪线是啥意思?

提问人: 拉小登Dony

如题,应该怎么理解上个案例中的两个波浪线?

回答人: 拉小登老师

第一个 ~ 运算符将操作数强制为整数(可能在将值强制为字符串或布尔值之后),然后反转最低 31 位。官方 ECMAScript 数字都是浮点数,但在 SpiderMonkey 引擎中,有些数字是 31 位整数实现的。

您可以使用它将 1 元素数组转换为整数。浮点数根据 C 规则进行转换,即。小数部分的截断。

第二个 ~ 运算符然后将位反转,所以你知道你将有一个整数。这与在条件语句中将值强制为布尔值不同,因为空对象 的计算结果为 true,而 ~~ 的计算结果为 false。

js>~~"yes"
0
js>~~3
3
js>~~"yes"
0
js>~~false
0
js>~~""
0
js>~~true
1
js>~~"3"
3
js>~~
0
js>~~a:2
0
js>~~[2]
2
js>~~[2,3]
0
js>~~toString: function() return 4
4
js>~~NaN
0
js>~~[4.5]
4
js>~~5.6
5
js>~~-5.6
-5

参考教程

https://it.cha138.com/biancheng/show-13523961.html

下面这段代码,有哪些知识点?

提问人: 拉小登Dony

function test(){
	var arr = []
	arr[2] = ~~arr[2] + 1
	Console.log(`arr: ${JSON.stringify(arr)}`)
	var brr = []
	brr[2] = (brr[2] || 0 ) + 1
	Console.log(`brr: ${JSON.stringify(brr)}`)
}

回答人: 拉小登老师

1- 创建数组的方法

用一个中括号,就可以创建一个空白的数组。

var arr = []

2- 引用数组元素的方法

中括号加索引数字,就可以获得元素。

下面的代码,是获取第3个元素,因为元素的索引值是从0开始的。

arr = [2]

3- 空值转0的方法

使用两个波浪线,把空白的null,转换为0.

~~arr[2]

4- 数组转字符串的方法

使用JSON.Stringify()方法,可以把数组转化成文本

JSON.stringify(arr)

因为直接log数组,是不显示任何内容的。

5-文字模版的写法

通过“可以创建文字模版,用$来引用变量。

Console.log(`arr: ${JSON.stringify(arr)}`)

 

联系作者

公众号:拉小登 | 微博:拉登Dony | B站:拉小登Excel

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注