考虑用C ++编写以下程序:
#include <iostream>
int main()
{
float f = 9.9f, m = 3.3f;
float c = f % m;
std::cout << c;
return 0;
}
显示错误:Illegal use of floating point
当我用Java编写相同的程序时:
class Test
{
public static void main(String args[])
{
float f = 9.9f, m = 3.3f;
float c = f % m;
System.out.println(c);
}
}
给我输出:3.2999997
以及C#:
using System;
class Test
{
public static void Main()
{
float f = 9.9f, m = 3.3f;
float c = f % m;
Console.WriteLine(c);
}
}
给出输出:3.3
为什么相同的编程逻辑会以不同的语言提供三种不同的输出?为什么我们不能在C / C ++中使用modulo %
浮点数但可以在Java和C#中使用?
对不起,如果这是一个愚蠢的问题......我是学生......谢谢。
答案 0 :(得分:1)
可能C和C ++没有它,因为有多种方法可以做到这一点:向零舍入(fmod
)并向最接近的整数(remainder
舍入)。您必须知道(或查找)您引用的其他语言选择的版本。
答案 1 :(得分:-1)
我从here找到了最简单的解决方案。
模运算符(余数运算符)返回分区的那一部分 在非浮点运算的情况下丢弃(余数)。
所以,当你有浮点模时,自那以后就没有意义了 什么都没有丢弃。
e.g. int: 155 % 100 = 55 so, for integer division, 155 / 100 = 1 reminder = 55 and for floating point division: 155 / 100 = 1.55 remainder=0.0
所以,由于在划分浮点时没有提醒,%运算符不适用于浮点运算。
因此,在像C这样的早期语言中,不支持%
浮点运算符。
在java和C#中,余数的概念被扩展,并且在使用%
运算符时,浮点数被视为一个数字价格,最多可达x个小数点。
例如,Java将采用9.900000 % 3.300000 = 3.2999997
而C#采用9.9 % 3.3 = 3.3
。因此,在使用%
时,此处9.900000并且所有浮动变为价格no.s。所以他们可以给予其余的。实际上,它们是9.9xxxxxxxxxxxxxxxxxxx ...(不准确)。