Tại sao giải quyết lỗi tự làm tròn số thực

c++

(Vỹ Nguyễn Trần Gia) #1

Xin chào mọi người, em mới học lập trình nên không biết tại sao em khai báo kiểu double nhưng khi nhập số thập phân thì nó tự làm tròn rồi tính kết quả, làm ra kết quả sai (em dùng visual 2017 c++ ạ).

#include <conio.h>
#include <math.h>

int main()
{
	double W, H, BMI;
	printf("Nhap khoi luong:");
	scanf_s("%lf", &W);
	printf("Nhap chieu cao:");
	scanf_s("%lf", &H);
	BMI = W / (pow(H, 2));
	printf("BMI=%.2lf\n", BMI);
	if (BMI < 18.5)
		printf("Nguoi gay");
	else if (BMI >= 18.5&&BMI < 25)
		printf("Nguoi binh thuong");
	else if (BMI >= 25 && BMI <30)
		printf("Nguoi beo phi do I");
	else if (BMI >=30 && BMI <= 40)
		printf("Nguoi beo phi do II");
	else
		printf("Nguoi beo phi do III");
	_getch();
	return 0;
}

(anhpv) #2

tăng số lượng ký tự sau dấu phẩy lên xem?
Cái này phải ép kiểu không là nó sẽ nhận cái W với pow(H,2) là số nguyên.
Nhớ ko nhầm thì phép / là dành cho 2 số nguyên thì phải.

BMI = W / (pow(H, 2));

(Vỹ Nguyễn Trần Gia) #3

cám ơn anh, để e thử xem


(Vỹ Nguyễn Trần Gia) #4

kết quả vẫn vậy, còn cách khác không vậy anh


(rogp10) #5

Sao bạn ko viết là H*H :smiley:

Hàm pow này nó ko chính xác cho lắm.


(Vỹ Nguyễn Trần Gia) #6

đã thử rồi . cũng z.


(NhậtĐz) #7

image
chạy bên code blocks thấy ok nhé.


83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?