JavaScript 编程题
解释一下下面代码的输出。
1.console.log(0.1 + 0.2); //0.30000000000000004
2.console.log(0.1 + 0.2 == 0.3); //false
1.
0.1 的二进制表示为 1.1001100110011001100110011001100110011001100110011001 1(0011)+ * 2^-4;
当64bit的存储空间无法存储完整的无限循环小数,而IEEE 754 Floating-point采用round to nearest, tie to even的舍入模式,因此0.1实际存储时的位模式是0-01111111011-1001100110011001100110011001100110011001100110011010;
0.2 的二进制表示为 1.1001100110011001100110011001100110011001100110011001 1(0011)+ * 2^-3;
当64bit的存储空间无法存储完整的无限循环小数,而IEEE 754 Floating-point采用round to nearest, tie to even的舍入模式,因此0.2实际存储时的位模式是0-01111111100-1001100110011001100110011001100110011001100110011010;
实际存储的位模式作为操作数进行浮点数加法,得到 0-01111111101-0011001100110011001100110011001100110011001100110100。转换为十进制即为0.30000000000000004。
2.
十进制0.1
=> 二进制0.00011001100110011…(循环0011)
=>尾数为11001100110011001100…1100(共52位,除了小数点左边的1),指数为-4(二进制移码为00000000010),符号位为0
=> 计算机存储为:0 00000000100 10011001100110011…11001
=> 因为尾数最多52位,所以实际存储的值为0.00011001100110011001100110011001100110011001100110011001
而十进制0.2
=> 二进制0.0011001100110011…(循环0011)
=>尾数为11001100110011001100…1100(共52位,除了小数点左边的1),指数为-3(二进制移码为00000000011),符号位为0
=> 存储为:0 00000000011 10011001100110011…11001
因为尾数最多52位,所以实际存储的值为0.00110011001100110011001100110011001100110011001100110011
那么两者相加得:
0.00011001100110011001100110011001100110011001100110011001
+ 0.00110011001100110011001100110011001100110011001100110011 (确认??)
= 0.01001100110011001100110011001100110011001100110011001100
转换成10进制之后得到:0.30000000000000004
MySQL 编程题
表名 student_score
name course score
张三 语文 81
张三 数学 75
李四 语文 76
李四 数学 90
王五 语文 81
王五 数学 100
王五 英语 90
查询出「张」姓学生中平均成绩大于 75 分的学生信息。
CREATE TABLE studnet_score1(
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
course VARCHAR(50) NOT NULL,
score INT NOT null
)
INSERT INTO studnet_score1(name,course,score) VALUES("张三","语文",81);
INSERT INTO studnet_score1(name,course,score) VALUES("张三","数学",75);
INSERT INTO studnet_score1(name,course,score) VALUES("李四","语文",76);
INSERT INTO studnet_score1(name,course,score) VALUES("李四","数学",90);
INSERT INTO studnet_score1(name,course,score) VALUES("王五","语文",81);
INSERT INTO studnet_score1(name,course,score) VALUES("王五","数学",100);
INSERT INTO studnet_score1(name,course,score) VALUES("王五","英语",90);
SELECT name,AVG(score) AS "平均成绩" FROM studnet_score1
WHERE name LIKE "张%"
GROUP BY name;```
结果:
| name | 平均成绩 |
| ------------- |:-------------:|
|张三 | 78|
**Java 编程题**
猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个 第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第 10 天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
package practice;
public class Demo {
public static void main(String[] args) {
int count = 1;
for (int i = 1; i < 10; i++) {
count = (count + 1) * 2;
}
System.out.println(“第一天共有桃子” + count);
}
}
输出结果:
第一天共有桃子1534
“`