Chương trình làm tròn số

#include <stdio.h>
void nhap( float &a);
int lamtronso( float a);
void xuat ( int b);
void main ()
{
	float a;
	nhap(a);
	int b= lamtronso(a);
	xuat(b);
}
void nhap( float &a)
{
	scanf("%f", &a);
}
int lamtronso( float a)
{
	int b;
	if ((a % 1) >=0.5)
		b=(a/1)+1;
	return b;
}
void xuat ( int b)
{
	printf("%d", b);
}

Bài này em bị hai lỗi mà đó giờ gặp nhưng không bao giờ biết sửa

  1. ‘%’ : illegal, left operand has type ‘float’
  2. ‘=’ : conversion from ‘float’ to ‘int’, possible loss of data

Xem cách định dạng mã để dễ nhìn:

  1. Là lỗi: trong C không hỗ trợ chia lấy dư cho số thực (float, double).
  2. Là cảnh báo. Có thể phớt lờ cảnh báo. Vì mục đích làm tròn chính là làm mất phần thập phân.

Dùng fmod() trong math.h.

2 Likes

Lấy (int) (a + 0.5) thôi :smiley: vì (vô tình) 0.5 là số tròn không lẻ :slight_smile:

3 Likes

Anh ơi em muốn lấy bên phải phần thập phân chứ không phải lấy dư anh giúp em với.

(int) a là phần nguyên rồi, nhưng làm tròn thì không cần trích phần lẻ :smiley:

2 Likes

Dùng modf tách được cả phần nguyên và phần lẻ.

3 Likes

Cho em hỏi luôn là bài em làm sao mới có thể sửa được lỗi này.
Note: không được đổi thành float hay int hết nha .

Đừng gán trực tiếp

biến_int = giá_trị_float

mà hãy ép kiểu. Dùng

static_cast<int>(f); // f là biến kiểu double/float
3 Likes

Thêm nữa là trong C không có tham chiếu, chắc là bạn chạy chương trình theo kiểu C++ nên trình biên dịch không báo lỗi.

2 Likes

Bạn cho mình hỏi luôn là nếu mình làm kiểu này

int a,b;
float chia;
int phepchia= thuong(a,b,chia);

làm như vậy có báo lỗi không bởi vì ban đầu là int và bên trong 2 kiểu int, 1 kiểu float. Nếu có hoặc không thì tại sao lại như vậy ? thank bạn

Lưu ý chia truyền theo tham biến. int chia int ra float thì công dụng sẽ khác so với ra int, chứ về nguyên tắc thì ko sao.

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