Skip to content

Commit 1c0142f

Browse files
committed
docs(data-types): translate number lesson
1 parent 5573899 commit 1c0142f

13 files changed

Lines changed: 231 additions & 229 deletions

File tree

‎1-js/05-data-types/02-number/1-sum-interface/solution.md‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,6 @@ let b = +prompt("The second number?", "");
77
alert( a + b );
88
```
99

10-
สังเกตเครื่องหมายบวกเดี่ยว `+` หน้า `prompt` มันแปลงค่าเป็นตัวเลขทันที
10+
สังเกตเครื่องหมายบวกหน้าเดียว `+` ที่อยู่หน้า `prompt` เครื่องหมายนี้จะแปลงค่าที่รับมาเป็นตัวเลขทันที
1111

12-
มิฉะนั้น `a` และ `b` จะเป็นสตริง และผลรวมของพวกมันจะเป็นการต่อสตริง เช่น: `"1" + "2" = "12"`
12+
ถ้าไม่ใส่ `+` ตัวแปร `a` และ `b` จะเป็นสตริง เครื่องหมายบวกจึงนำสตริงมาต่อกันแทน เช่น `"1" + "2" = "12"`

‎1-js/05-data-types/02-number/1-sum-interface/task.md‎

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,10 @@ importance: 5
22

33
---
44

5-
คุณต้องการให้ผมแปลโจทย์และคำอธิบายนี้เป็นภาษาไทยใช่ไหมครับ? ถ้าใช่ นี่คือคำแปล:
5+
# หาผลรวมจากตัวเลขที่ผู้ใช้ป้อน
66

7-
# รวมตัวเลขจากผู้เข้าชม
7+
เขียนสคริปต์ที่ขอให้ผู้ใช้ป้อนตัวเลขสองตัว แล้วแสดงผลรวมของทั้งสองตัว
88

9-
สร้างสคริปต์ที่ขอให้ผู้เข้าชมป้อนตัวเลขสองตัว แล้วแสดงผลรวมของตัวเลขเหล่านั้น
9+
[demo]
1010

11-
[สาธิต]
12-
13-
ข้อควรระวัง: มีจุดที่ต้องระวังเกี่ยวกับประเภทข้อมูล
11+
ป.ล. ระวังเรื่องชนิดข้อมูลให้ดี
Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,32 @@
1-
ภายในระบบ เศษส่วนทศนิยม `6.35` เป็นเลขฐานสองที่ไม่มีที่สิ้นสุด เหมือนกับกรณีอื่นๆ ทั้งหมด มันถูกเก็บไว้โดยมีการสูญเสียความแม่นยำ
1+
ภายใน JavaScript เศษส่วนทศนิยม `6.35` กลายเป็นเลขฐานสองที่ยาวไม่รู้จบ ระบบจึงเก็บค่าแบบคลาดเคลื่อนไปเล็กน้อย
22

3-
ลองดู:
3+
ลองดูค่าที่เก็บจริง:
44

55
```js run
66
alert( 6.35.toFixed(20) ); // 6.34999999999999964473
77
```
88

9-
การสูญเสียความแม่นยำนี้สามารถทำให้ตัวเลขเพิ่มขึ้นหรือลดลงได้ ในกรณีนี้ตัวเลขกลายเป็นน้อยลงเล็กน้อย นั่นคือเหตุผลที่มันถูกปัดลง
9+
ความคลาดเคลื่อนอาจทำให้ค่ามากขึ้นหรือน้อยลงก็ได้ กรณีนี้ค่าที่เก็บไว้น้อยกว่า `6.35` เล็กน้อย `toFixed` จึงปัดลง
1010

1111
แล้ว `1.35` ล่ะ?
1212

1313
```js run
1414
alert( 1.35.toFixed(20) ); // 1.35000000000000008882
1515
```
1616

17-
ในกรณีนี้ การสูญเสียความแม่นยำทำให้ตัวเลขมากขึ้นเล็กน้อย ดังนั้นมันจึงถูกปัดขึ้น
17+
คราวนี้ค่าที่เก็บไว้มากกว่า `1.35` เล็กน้อย `toFixed` จึงปัดขึ้น
1818

19-
**เราจะแก้ปัญหากับ `6.35` ได้อย่างไรถ้าเราต้องการให้มันถูกปัดเศษอย่างถูกต้อง?**
19+
**ถ้าต้องการปัด `6.35` ให้ได้ค่าตามที่ตั้งใจ จะแก้อย่างไร?**
2020

21-
เราควรทำให้มันใกล้กับจำนวนเต็มก่อนที่จะปัดเศษ:
21+
ก่อนปัด ให้เลื่อนจุดทศนิยมเพื่อทำให้ค่าเข้าใกล้จำนวนเต็ม:
2222

2323
```js run
2424
alert( (6.35 * 10).toFixed(20) ); // 63.50000000000000000000
2525
```
2626

27-
สังเกตว่า `63.5` ไม่มีการสูญเสียความแม่นยำเลย นั่นเป็นเพราะส่วนทศนิยม `0.5` จริงๆ แล้วคือ `1/2` เศษส่วนที่หารด้วยกำลังของ `2` จะถูกแสดงอย่างแม่นยำในระบบฐานสอง ตอนนี้เราสามารถปัดเศษมันได้:
27+
สังเกตว่า `63.5` ไม่มีความคลาดเคลื่อน เพราะส่วนทศนิยม `0.5` เท่ากับ `1/2` และเศษส่วนที่มีตัวหารเป็นกำลังของ `2` เขียนในระบบฐานสองได้พอดี ทีนี้จึงปัดค่าได้:
28+
2829

2930
```js run
30-
alert( Math.round(6.35 * 10) / 10); // 6.35 -> 63.5 -> 64(ปัดเศษ) -> 6.4
31+
alert( Math.round(6.35 * 10) / 10 ); // 6.35 -> 63.5 -> 64(ปัดแล้ว) -> 6.4
3132
```
32-

‎1-js/05-data-types/02-number/2-why-rounded-down/task.md‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,20 @@ importance: 4
22

33
---
44

5-
# ทำไม 6.35.toFixed(1) == 6.3?
5+
# ทำไม 6.35.toFixed(1) จึงได้ 6.3?
66

7-
ตามเอกสารประกอบ ทั้ง `Math.round` และ `toFixed` ปัดเศษไปยังตัวเลขที่ใกล้ที่สุด: `0..4` ปัดลง ขณะที่ `5..9` ปัดขึ้น
7+
ตามเอกสาร `Math.round` และ `toFixed` ต่างก็ปัดไปยังตัวเลขที่ใกล้ที่สุด ถ้าหลักถัดไปเป็น `0..4` จะปัดลง ส่วน `5..9` จะปัดขึ้น
88

99
ตัวอย่างเช่น:
1010

1111
```js run
1212
alert( 1.35.toFixed(1) ); // 1.4
1313
```
1414

15-
ในตัวอย่างที่คล้ายกันด้านล่าง ทำไม `6.35` ถูกปัดเศษเป็น `6.3` ไม่ใช่ `6.4`?
15+
แต่ทำไมตัวอย่างที่คล้ายกันนี้จึงปัด `6.35` เป็น `6.3` ไม่ใช่ `6.4`?
1616

1717
```js run
1818
alert( 6.35.toFixed(1) ); // 6.3
1919
```
2020

21-
จะปัดเศษ `6.35` ให้ถูกต้องได้อย่างไร?
21+
ต้องเขียนอย่างไรจึงจะปัด `6.35` ได้ตามที่ต้องการ?

‎1-js/05-data-types/02-number/3-repeat-until-number/solution.md‎

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
12
```js run demo
23
function readNumber() {
34
let num;
@@ -14,8 +15,8 @@ function readNumber() {
1415
alert(`Read: ${readNumber()}`);
1516
```
1617

17-
วิธีแก้ปัญหานี้ค่อนข้างซับซ้อนกว่าที่ควรจะเป็นเล็กน้อย เพราะเราต้องจัดการกับ `null` และบรรทัดว่าง
18+
วิธีแก้ซับซ้อนขึ้นเล็กน้อยเพราะต้องรองรับ `null` และค่าว่างด้วย
1819

19-
ดังนั้นเราจึงยอมรับการป้อนข้อมูลจนกว่าจะเป็น "ตัวเลขปกติ" ทั้ง `null` (ยกเลิก) และบรรทัดว่างก็เข้าเงื่อนไขนี้ด้วย เพราะในรูปแบบตัวเลขพวกมันเป็น `0`
20+
ลูปจะรับค่าต่อไปจนกว่าค่านั้นจะเป็น "ตัวเลขปกติ" แต่ทั้ง `null` จากการกดยกเลิกและสตริงว่างก็ผ่านเงื่อนไขนี้ เพราะเมื่อแปลงเป็นตัวเลขจะได้ `0`
2021

21-
หลังจากที่เราหยุด เราต้องจัดการกับ `null` และบรรทัดว่างเป็นพิเศษ (ส่งคืน `null`) เพราะการแปลงพวกมันเป็นตัวเลขจะส่งคืน `0`
22+
หลังออกจากลูปจึงต้องแยกตรวจ `null` และสตริงว่าง แล้วคืนค่า `null` ถ้าพบค่าเหล่านี้ ไม่อย่างนั้นการแปลงเป็นตัวเลขจะได้ `0`

‎1-js/05-data-types/02-number/3-repeat-until-number/task.md‎

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,12 @@ importance: 5
22

33
---
44

5-
# ทำซ้ำจนกว่าจะได้รับข้อมูลเป็นตัวเลข
5+
# ถามซ้ำจนกว่าจะได้ตัวเลข
66

7-
สร้างฟังก์ชัน `readNumber` ที่ขอให้ป้อนตัวเลขจนกว่าผู้เข้าชมจะป้อนค่าตัวเลขที่ถูกต้อง
7+
สร้างฟังก์ชัน `readNumber` ที่ถามให้ผู้ใช้ป้อนค่าไปเรื่อย ๆ จนกว่าค่าที่ป้อนจะเป็นตัวเลข
88

9-
ค่าที่ได้ต้องถูกส่งคืนเป็นตัวเลข
9+
ฟังก์ชันต้องคืนค่าที่ได้เป็นตัวเลข
1010

11-
ผู้เข้าชมสามารถหยุดกระบวนการได้โดยการป้อนบรรทัดว่างหรือกด "CANCEL" ในกรณีนั้น ฟังก์ชันควรส่งคืน `null`
11+
ผู้ใช้หยุดการทำงานได้ด้วยการส่งค่าว่างหรือกด "CANCEL" กรณีนี้ฟังก์ชันต้องคืนค่า `null`
1212

13-
[สาธิต]
13+
[demo]
Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
นั่นเป็นเพราะ `i` จะไม่มีวันเท่ากับ `10` พอดี
1+
เพราะ `i` จะไม่มีวันเท่ากับ `10`
22

3-
ลองรันโค้ดเพื่อดูค่าจริงๆ ของ `i`:
3+
ลองรันโค้ดนี้เพื่อดูค่าจริงของ `i`:
44

55
```js run
66
let i = 0;
@@ -10,13 +10,8 @@ while (i < 11) {
1010
}
1111
```
1212

13-
ไม่มีค่าใดที่เท่ากับ `10` พอดีเลย
13+
ไม่มีค่าไหนเท่ากับ `10` พอดี
1414

15-
สิ่งเหล่านี้เกิดขึ้นเนื่องจากการสูญเสียความแม่นยำเมื่อบวกเศษส่วนเช่น `0.2`
15+
สาเหตุคือความแม่นยำที่หายไปเมื่อบวกเศษส่วนอย่าง `0.2`
1616

17-
คำอธิบายเพิ่มเติม:
18-
1. ในระบบคอมพิวเตอร์ เลขทศนิยมถูกเก็บในรูปแบบเลขฐานสอง ซึ่งไม่สามารถแสดงเศษส่วนบางตัว (เช่น 0.2) ได้อย่างแม่นยำ
19-
2. การบวก 0.2 ซ้ำๆ จะสะสมความคลาดเคลื่อนเล็กน้อยในแต่ละครั้ง
20-
3. เมื่อ `i` เข้าใกล้ 10 มันอาจจะมีค่าเช่น 9.999999999999998 หรือ 10.000000000000002 ซึ่งไม่เท่ากับ 10 พอดี
21-
22-
บทสรุป: หลีกเลี่ยงการตรวจสอบความเท่ากันอย่างแม่นยำเมื่อทำงานกับเศษส่วนทศนิยม
17+
สรุปคือ หลีกเลี่ยงการเปรียบเทียบว่าเท่ากันพอดีเมื่อทำงานกับเศษส่วนทศนิยม

‎1-js/05-data-types/02-number/4-endless-loop-error/task.md‎

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,13 @@ importance: 4
22

33
---
44

5-
# ลูปอนันต์ที่ไม่คาดคิด
5+
# ลูปที่ไม่ยอมจบ
66

7-
ลูปนี้เป็นลูปอนันต์ มันไม่มีวันจบ ทำไม?
7+
ลูปนี้ทำงานไม่รู้จบ เพราะอะไร?
88

99
```js
1010
let i = 0;
1111
while (i != 10) {
1212
i += 0.2;
1313
}
1414
```
15-

‎1-js/05-data-types/02-number/8-random-min-max/solution.md‎

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
เราต้องการ "แมป" ค่าทั้งหมดจากช่วง 0..1 ไปเป็นค่าจาก `min` ถึง `max`
1+
เราต้องแปลงค่าทั้งหมดในช่วง `0..1` ให้กระจายไปอยู่ในช่วง `min` ถึง `max`
22

3-
สามารถทำได้ใน 2 ขั้นตอน:
3+
ทำได้สองขั้นตอน:
44

5-
1. ถ้าเราคูณตัวเลขสุ่มจาก 0..1 ด้วย `max-min` ช่วงของค่าที่เป็นไปได้จะขยายจาก `0..1` เป็น `0..max-min`
6-
2. จากนั้นถ้าเราบวก `min` ช่วงที่เป็นไปได้จะกลายเป็นจาก `min` ถึง `max`
5+
1. คูณตัวเลขสุ่มในช่วง `0..1` ด้วย `max-min` ช่วงของค่าที่เป็นไปได้จะขยายจาก `0..1` เป็น `0..max-min`
6+
2. บวก `min` เข้าไป ช่วงของค่าที่เป็นไปได้จะเลื่อนไปเป็น `min` ถึง `max`
77

8-
ฟังก์ชัน:
8+
เขียนเป็นฟังก์ชันได้ดังนี้:
99

1010
```js run
1111
function random(min, max) {

‎1-js/05-data-types/02-number/8-random-min-max/task.md‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@ importance: 2
22

33
---
44

5-
# สุ่มตัวเลขจาก min ถึง max
5+
# สุ่มตัวเลขตั้งแต่ min ถึง max
66

7-
ฟังก์ชันในตัว `Math.random()` สร้างค่าสุ่มจาก `0` ถึง `1` (ไม่รวม `1`)
7+
ฟังก์ชัน `Math.random()` ที่มีมาให้จะสร้างค่าสุ่มตั้งแต่ `0` ถึง `1` โดยไม่รวม `1`
88

9-
เขียนฟังก์ชัน `random(min, max)` เพื่อสร้างตัวเลขทศนิยมแบบสุ่มจาก `min` ถึง `max` (ไม่รวม `max`)
9+
เขียนฟังก์ชัน `random(min, max)` เพื่อสร้างตัวเลขสุ่มที่มีทศนิยมได้ ตั้งแต่ `min` ถึง `max` โดยไม่รวม `max`
1010

11-
ตัวอย่างการทำงาน:
11+
ตัวอย่างผลลัพธ์:
1212

1313
```js
1414
alert( random(1, 5) ); // 1.2345623452

0 commit comments

Comments
 (0)