Mình bị lỗi invalid operands of types ‘double’ and ‘int’ to binary ‘operator%’ ai biết cách gì giúp mình với
#include <iostream>
int main () {
double vinh = 20;
int remainder = vinh % 6
std::cout << remainder;
return 0;
Mình bị lỗi invalid operands of types ‘double’ and ‘int’ to binary ‘operator%’ ai biết cách gì giúp mình với
#include <iostream>
int main () {
double vinh = 20;
int remainder = vinh % 6
std::cout << remainder;
return 0;
Mất căn bản quá bạn ơi. Số thực sao có thể chia nguyên được? vinh % 6 là tào lao nhé.
The best way to learn C/C++ is to consult the tutorial manual before you start asking. Back to your question: In C/C++, you can use the fmod() function to get the remainder of a division (or modulo).
int remainder = (int)fmod(vinh, 6);
double dRemainder = fmod(vinh, 6); // double remainder
Hầu hết các ngôn ngữ lập trình khác đều hỗ trợ, nhưng với c++ phải dùng fmod.
Chatgpt:
Đoạn mã bạn đưa ra có 2 vấn đề:
Bạn đang dùng % (modulo) với biến vinh là double, trong khi toán tử % chỉ hoạt động với kiểu nguyên (int, long, v.v.). Điều này sẽ gây lỗi khi biên dịch.
Dòng này thiếu dấu chấm phẩy:
int remainder = vinh % 6 // <-- thiếu dấu ‘;’
Cách sửa:
Cách 1: Ép kiểu vinh sang int
#include
int main() {
double vinh = 20;
int remainder = static_cast(vinh) % 6;
std::cout << remainder;
return 0;
}
Cách 2: Khai báo vinh là int luôn nếu không cần số thực:
#include
int main() {
int vinh = 20;
int remainder = vinh % 6;
std::cout << remainder;
return 0;
}
Cả hai cách trên sẽ in ra 2, vì 20 % 6 == 2.
Muốn mình giúp giải thích rõ hơn về toán tử % hay cách ép kiểu?
Great câu hỏi luôn!
Lý do double
không dùng được với %
là vì toán tử %
(modulo) chỉ định nghĩa cho số nguyên trong C++. Khi bạn viết a % b
, cả a
và b
đều phải là kiểu nguyên ( int
, long
, short
, v.v.).
double
không hỗ trợ %
?double
đại diện cho số thực (có phần thập phân).modulo
truyền thống như với số nguyên.Ví dụ:
Giả sử bạn muốn tính 5.5 % 2
, bạn mong đợi điều gì?
1.5
, vì 5.5 / 2 = 2.75
⇒ dư là 1.5
.%
mà dùng fmod()
trong thư viện cmath
.double
trong C++Bạn dùng hàm fmod()
từ <cmath>
:
#include <iostream>
#include <cmath>
int main() {
double a = 20.5;
double b = 6.0;
double result = fmod(a, b);
std::cout << result; // in ra 2.5
return 0;
}
%
dùng cho int .fmod()
dùng cho double/float .%
cho kiểu double
nên nếu dùng sẽ báo lỗi compile.Muốn mình demo thêm ví dụ về fmod()
hoặc giải thích nội tại của nó?
Hay lắm, câu này rất thú vị vì mỗi ngôn ngữ xử lý toán tử modulo với số thực khác nhau . Dưới đây là vài ví dụ so sánh:
%
cho số thựcprint(5.5 % 2) # Kết quả: 1.5
%
với float.a % b = a - b * floor(a / b)
5.5 % 2 = 5.5 - 2 * floor(2.75) = 5.5 - 4 = 1.5
%
với số thựcconsole.log(5.5 % 2); // Kết quả: 1.5
%
hoạt động với cả số nguyên và số thực.%
hỗ trợ float và doubleSystem.out.println(5.5 % 2); // Kết quả: 1.5
%
cho các kiểu float
và double
.Console.WriteLine(5.5 % 2); // Kết quả: 1.5
%
cho số thực.%
cho số thựcfmod()
từ thư viện <cmath>
nếu muốn modulo số thực.Nếu bạn đang dùng C++ nhưng muốn viết mã theo phong cách như Python, thì nên chú ý khoản này nhé.
Cần mình làm demo thêm ở ngôn ngữ nào không?