THINK JAVA: CÁCH SUY NGHĨ NHƯ NHÀ KHOA HỌC MÁY TÍNH - Trang 23

Ch

ng 3: Ph

ng th c

ươ

ươ

ứ r ng

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;