Skip to content

0.5 Why Numbers Are Different

ตัวเลขดูง่ายกว่า text — ไม่ต้องมี encoding แต่มันซ่อนกับดักของตัวเอง

ชนิดตัวอย่างเก็บอะไรใช้สำหรับ
Integer42, -17จำนวนเต็ม, แม่นยำนับจำนวน, IDs
Float3.14, 0.1ทศนิยม — ประมาณการวัด, วิทยาศาสตร์
Decimal199.99ทศนิยม — แม่นยำเงิน, เปอร์เซ็นต์
0.1 + 0.2 = 0.30000000000000004 😱

ทำไม? คอมพิวเตอร์เก็บ float เป็น binary — 0.1 ในฐานสอง เหมือน 1/3 ในฐานสิบ มันไม่มีวันจบ คอมพิวเตอร์ตัดทิ้ง แล้ว error เล็กๆ ก็สะสม

C ให้คุณเลือก byte-width เอง — นี่คือ DNA ของ SQL types:

#include <stdio.h>
int main() {
printf("int = %zu bytes\n", sizeof(int)); // 4
printf("long = %zu bytes\n", sizeof(long)); // 8
printf("float = %zu bytes\n", sizeof(float)); // 4
printf("double= %zu bytes\n", sizeof(double)); // 8
float f = 0.1f + 0.2f;
printf("%.20f\n", f); // 0.30000001192092895508
return 0;
}

C ทำให้คุณเห็นว่า SMALLINT / INTEGER / BIGINT และ REAL / DOUBLE PRECISION ของ SQL มาจากไหน