Tr v
ở ề M c l c
ụ ụ cu n sách
ố
3.1 D u ph y đ ng
ấ
ẩ
ộ
ch
ng tr
c ta đã g p tr c tr c khi tính toán nh ng s không nguyên. Ta đã s a m t cách t m b
Ở ươ
ướ
ặ
ụ
ặ
ữ
ố
ử
ộ
ạ
ợ
b ng vi c tính s ph n trăm thay vì s th p phân, nh ng m t gi i pháp t ng quát h n s là dùng s có
ằ
ệ
ố
ầ
ố ậ
ư
ộ
ả
ổ
ơ ẽ
ố
d u ph y đ ng, đ bi u di n đ
c c s nguyên l n s có ph n th p phân. Trong Java, ki u d u ph y
ấ
ẩ
ộ
ể ể
ễ
ượ ả ố
ẫ ố
ầ
ậ
ể
ấ
ẩ
đ ng có tên
ộ
double, là ch g i t t c a “double-precision” (đ chu n xác kép).
ữ ọ ắ ủ
ộ
ẩ
B n có th t o nên các bi n ph y đ ng r i gán giá tr cho chúng theo cú pháp gi ng nh ta đã làm v i
ạ
ể ạ
ế
ẩ
ộ
ồ
ị
ố
ư
ớ
nh ng ki u d li u khác. Ch ng h n:
ữ
ể
ữ ệ
ẳ
ạ
double
pi;
pi = 3.14159;
Vi c khai báo m t bi n đ ng th i gán giá tr cho nó cũng h p l :
ệ
ộ
ế
ồ
ờ
ị
ợ ệ
int
x = 1;
String empty =
""
;
double
pi = 3.14159;
Cú pháp này r t thông d ng; vi c k t h p gi a khai báo và gán đôi khi còn đ
c g i là phép
ấ
ụ
ệ ế ợ
ữ
ượ ọ
kh i t o
ở ạ .
M c dù các s ph y đ ng r t h u ích nh ng chúng cũng là ngu n gây nên r c r i, vì d
ng nh có ph n
ặ
ố
ẩ
ộ
ấ ữ
ư
ồ
ắ ố
ườ
ư
ầ
trùng nhau gi a các s nguyên và s ph y đ ng. Ch ng h n, n u b n có giá tr
ữ
ố
ố
ẩ
ộ
ẳ
ạ
ế
ạ
ị 1, thì đó là s nguyên, s
ố
ố
ph y đ ng, hay c hai?
ẩ
ộ
ả
Java phân bi t giá tr s nguyên
ệ
ị ố
1 v i giá tr ph y đ ng
ớ
ị
ẩ
ộ 1.0, dù r ng chúng có v cùng là m t s . Chúng
ằ
ẻ
ộ ố
thu c v hai ki u d li u khác nhau, và nói ch t ch thì b n không đ
c phép gán giá tr ki u này cho
ộ ề
ể
ữ ệ
ặ
ẽ
ạ
ượ
ị ể
m t bi n ki u khác. Ch ng h n, câu l nh sau là h p l :
ộ
ế
ể
ẳ
ạ
ệ
ợ ệ
int
x = 1.1;
vì bi n v trái là
ế ở ế
int còn giá tr v ph i là
ị ở ế
ả
double. Nh ng r t d quên m t quy t c này, đ c bi t là vì
ư
ấ ễ
ấ
ắ
ặ
ệ
có nh ng n i mà Java s t đ ng chuy n t m t ki u này sang ki u khác. Ch ng h n:
ữ
ơ
ẽ ự ộ
ể ừ ộ
ể
ể
ẳ
ạ
double
y = 1;
v lý thì không h p l , nh ng Java v n cho phép đi u này nh cách t đ ng chuy n đ i
ề
ợ ệ
ư
ẫ
ề
ờ
ự ộ
ể
ổ
t
ừ int sang double. S d dãi này khá ti n l i, song có th g p v n đ , ch ng h n:
ự ễ
ệ ợ
ể ặ
ấ
ề
ẳ
ạ
double
y = 1 / 3;
B n có th trông đ i r ng bi n
ạ
ể
ợ ằ
ế y nh n giá tr
ậ
ị 0.333333, v n là m t giá tr ph y đ ng hoàn toàn h p l ,
ố
ộ
ị
ẩ
ộ
ợ ệ
song th c ra nó nh n đ
c
ự
ậ
ượ 0.0. Lý do là bi u th c v ph i là t s gi a hai s nguyên, vì v y Java th c
ể
ứ ế
ả
ỉ ố ữ
ố
ậ
ự
hi n phép
ệ
chia nguyên, và cho giá tr s nguyên b ng
ị ố
ằ 0. Chuy n thành d ng s ph y đ ng, k t qu
ể
ạ
ố
ẩ
ộ
ế
ả
là 0.0.
M t cách gi i quy t v n đ này (khi b n đã hình dung ra) là làm cho v ph i tr thành m t bi u th c
ộ
ả
ế ấ
ề
ạ
ế
ả ở
ộ
ể
ứ
ch a s ph y đ ng:
ứ ố
ẩ
ộ
double
y = 1.0 / 3.0;