App Inventor 2 数学代码块


拓展案例:

  1. 案例:文本转数字
  2. 案例:数字转文本
  3. 案例:指定将二进制的某一位(Bit)改为1
  4. 案例:指定将二进制的某一位(Bit)改为0

内置块中找不到你要查找的数学代码块?

一些数学代码块是下拉列表,它们可以转换为不同的块。以下是每个下拉列表中包含的内容的列表:


基础数字块 ( 0 )

可用作任何正数或负数,单击该块中的“0”将允许更改数字。

该块支持普通的 10 进制(例如:2、12 和 2.12),以及带前缀的其他机制数字,包括:

  • Base-2(二进制)数字,例如 0b10(等于十进制 2)
  • Base-8(八进制)数字,例如 0o14(等于十进制 12)
  • Base-16(十六进制)数字,例如 0xd4(等于十进制 212)

进制数字块 ( 0 )

默认表示 10 进制的数字,单击“0”将允许更改数字。点击下拉菜单可以切换 二进制八进制十进制十六进制 数字。

例如,这三个块是等效的:

下拉列表支持:十进制 (base-10)、二进制 (base-2)、八进制 (base-8) 和十六进制 (base-16) 输入格式。

十进制模式允许输入任何正数或负数(例如 2、-12、2.12)。其他模式仅允许您输入整数(也称为任何正数或零)。


等于 ( = )

测试两个数字是否相等并返回


不等于 ( ≠ )

测试两个数字是否不相等并返回


大于 ( > )

测试第一个数字是否大于第二个数字并返回


大于等于 ( ≥ )

测试第一个数字是否大于或等于第二个数字并返回


小于 ( < )

测试第一个数字是否小于第二个数字并返回


小于等于 ( ≤ )

测试第一个数字是否小于或等于第二个数字并返回


加 ( + )

返回将任意数量的具有数字值的块相加的结果。带有数字值的块包括基本数字块、列表或文本的长度、带有数字值的变量等。

该块是一个块拓展,可以扩展以允许更多数字相加。


减 ( - )

返回第一个数字减去第二个数字的结果。


乘 ( * )

返回任意数量的具有数字值的块相乘的结果。

它是一个 块拓展 块,可以扩展以允许更多数字相乘。


除 ( / )

返回第一个数字除以第二个数字的结果。


幂运算 ( ^ )

返回第一个数字的第二个数字次幂的结果。比如2^3 = 222 = 8


随机整数 (random integer)

返回给定值之间(包含首尾)的随机整数值。参数的顺序不限,也就是 1~100 和 100~1 效果一样。


随机小数 (random fraction)

返回 0 到 1 之间的随机值。


设定随机数种子 (random set seed to)

使用此块生成可重复的随机数序列。你可以通过使用相同值调用随机集种子来生成相同的随机数序列,这对于测试涉及随机值的程序很有用。

在科学技术和机器学习等其他算法相关任务中,我们经常需要用到随机数,为了把握随机数的生成特性,从随机数的随机无序中获得确定和秩序。我们可以利用 随机数种子(random seed) 来实现这一目标,随机数种子可以使得引入了随机数的整个程序,在多次运行中得到确定的、一致的结果。


最小值 (min)

返回一组数字的最小值。如果代码块中有未插入的槽,会被当做数字 0 进行计算。该块是一个 块拓展 ,有一个下拉列表。


最大值 (max)

返回一组数字的最大值。如果代码块中有未插入的槽,会被当做数字 0 进行计算。该块是一个 块拓展 ,有一个下拉列表。


平方根 (square root)

返回给定数字的平方根。如:9 的平方根将返回 3。


绝对值 (abs)

返回给定数字的绝对值。如:-3.3 的绝对值是 3.3,5 的绝对值是 5,0 的绝对值是 0。


相反数 (neg)

返回给定数字的负数,若给定负数则返回正数。如:8 返回 -8,-0.7 返回 0.7,0 则仍然返回 0。


对数 (log)

返回给定数字的自然对数,即以 e (2.71828…) 为底的对数。


e^

返回 e (2.71828…) 的给定数次方。


四舍五入 (round)

返回给定数字四舍五入到最接近的整数。如果小数部分 < .5,则会向下舍入;如果 > .5,则会向上舍入。

如果它恰好等于 0.5,则整数部分为偶数的数字将向下舍入,整数部分为奇数的数字将向上舍入(此方法称为舍入到偶数)。


上取整 (ceiling)

返回大于或等于给定数字的最小整数。如:3.01 返回 4。


下取整 (floor)

返回小于或等于给定数字的最大整数。如:3.88 返回 3。


求模 (modulo)

当 a 和 b 为正数时,求模(a,b) 与 余数(a,b) 相同。

更一般地,对任意 a 和 b 定义:求模(a,b),使得 ( 下取整(a/b) × b ) + 求模(a,b) = a。

例如,求模(11, 5) = 1、求模(-11, 5) = 4、求模(11, -5) = -4、求模(-11, -5) = -1。

求模(a,b) 始终与 b 具有相同的符号,而 余数(a,b) 始终与 a 具有相同的符号。


余数 (remainder)

余数(a,b) 返回 a 除以 b 并取余数的结果。余数是结果乘以 b 的小数部分。

例如,余数(11,5) = 1,因为11 / 5 = 2 15,在本例中,15 是小数部分。我们将其乘以 b(在本例中为 5),得到余数 1。

其他示例包括余数(-11, 5) = -1、余数(11, -5) = 1 和余数(-11, -5) = -1。


商 (quotient)

返回第一个数字除以第二个数字的结果并丢弃结果全部的小数部分。


正弦 (sin)

返回给定数字的正弦值(以度为单位)。


余弦 (cos)

返回给定数字的余弦(以度为单位)。


正切 (tan)

返回给定数字的正切值(以度为单位)。


反正弦 (asin)

返回给定数字的反正弦值(以度为单位)。


反余弦 (acos)

返回给定数字的反余弦值(以度为单位)。


反正切 (atan)

返回给定数字的反正切值(以度为单位)。


反正切2 (atan2)

给定 y 和 x,返回 y/x 的反正切值。


将弧度转换为度数 (convert radians to degrees)

返回给定数字(以弧度表示)的度数值。结果将是 [0, 360) 范围内的角度。


将度数转换为弧度 (convert degrees to radians)

返回给定数字(以度为单位)的弧度值。结果将是 [-π , +π) 范围内的角度。


数字转变为小数形式 (format as a decimal)

将数字格式化为小数,小数点后指定位数。位数必须是非负整数,如果位置太多结果是通过对数字进行四舍五入生成的;如果位置太少,则右侧补零。


是否为数字 (is a number)

如果给定对象是数字,则返回 ,否则返回


进制转换 (convert number)

获取一个表示一个基数的正整数的文本字符串,并返回一个表示另一个基数的相同数字的字符串。

例如,如果输入字符串为 10,则从 10 进制转换为二进制将产生字符串 1010; 如果输入字符串相同为 10,则从二进制转换为基数 10 将生成字符串 2。如果输入字符串相同为 10,则从基数 10 转换为十六进制将生成字符串 A。

进制转换案例如下:

十进制 二进制 十六进制
10 1010 0xA
57 111001 0x39
255 11111111 0xFF

按位与 (bitwise and)

对两个数字每一位进行 与操作。仅当两个操作数的相应位都为 1 时,结果的每一位才为 1。

例子:

  十进制 二进制 (内部展示)
  6 0 1 1 0
  3 0 0 1 1
结果: 2 0 0 1 0

按位或 (bitwise or Inclusive)

对两个数字每一位进行 或操作。如果每个操作数中的任一对应位为 1,则结果的每个位为 1。

例子:

  十进制 二进制 (内部展示)
  6 0 1 1 0
  3 0 0 1 1
结果: 7 0 1 1 1

按位异或 (bitwise or Exclusive)

对两个数字每一位进行 异或操作。仅当操作数中对应的一位为 1、另一位为 0 时,结果的每一位才为 1。

例子:

  十进制 二进制 (内部展示)
  6 0 1 1 0
  3 0 0 1 1
结果: 5 0 1 0 1

列表中出现次数最多的元素 (mode)

返回列表中出现次数最多的元素。


案例:指定将二进制的某一位(Bit)改为1

指定更新某一位为1,其他位不变:

举例:二进制 1010,更新第3位为1:将值和 0100 进行按位或操作。

  原值 操作 结果(二进制) 结果(十进制)
更新第1位为1 1010 | 0001 1011 11
更新第2位为1 1010 | 0010 1010 10
更新第3位为1 1010 | 0100 1110 14
更新第4位为1 1010 | 1000 1010 10

由于 App Inventor 没有移位操作,只能用一个列表存 0001 0010 0100….然后拿出来按位操作,这样代码量相比多分支判断会少很多,逻辑也更清晰。

参考代码如下:

二进制的某位改为1

测试代码如下:

测试二进制第3位改为1

测试结果:14


案例:指定将二进制的某一位(Bit)改为0

指定更新某一位为0,其他位不变:

举例:二进制 1010,更新第3位为0:将值和 1011 进行按位与操作。

  原值 操作 结果(二进制) 结果(十进制)
更新第1位为0 1010 & 1110 1010 10
更新第2位为0 1010 & 1101 1000 8
更新第3位为0 1010 & 1011 1010 10
更新第4位为0 1010 & 0111 0010 2

参考代码如下:

二进制的某位改为0