A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

问题1:在java中取模运算符% 是求余运算吗?
问题2:经过实践 3.2 % 2 =1.20000000000000002
                           5 % 2.2 = 0.5999999999999996
这是怎么回事呢?求解释(我在网上查找的一些质料说
Java取余运算符 (%)

  一个表达式的值除以另一个表达式的值,返回余数。

  result = number1 % number2

  参数

  result 任何变量

  number1 任何数值表达式

  number2 任何数值表达式。

  说明

  取余(或余数)运算符用 number1 除以 number2 (把浮点数四舍五入为整数),然后只返回余数作为 result。例如,在下面的表达式中,A (即 result)等于 5。

  A = 19 % 6.7

原文地址是:http://blog.csdn.net/wanlixingzhe/article/details/7359809
求解释,求指导

评分

参与人数 1技术分 +1 收起 理由
简★零度 + 1

查看全部评分

6 个回复

正序浏览
静水流华 发表于 2013-12-8 20:05
谢谢谢谢谢谢谢谢谢谢谢谢谢谢

不客气……
回复 使用道具 举报
翼展哈哈 发表于 2013-12-8 16:55
问题1:取模运算就是求余运算,详见http://baike.baidu.com/link?url=P362aoFciDy6DS14QyEmpsFQE2dMkxP_llx ...

谢谢谢谢谢谢谢谢谢谢谢谢谢谢
回复 使用道具 举报
问题1:取模运算就是求余运算,详见http://baike.baidu.com/link?url=P362aoFciDy6DS14QyEmpsFQE2dMkxP_llxOO9dLaNflSUKlrLM4WSY3HFdcbqNvpghs3jLW5oS1XIPobzbw8_的第一句话;
问题2:取余运算,就是取余运算符前面的那个数num1除以取余运算符后面的那个数num2,得到的商一定是一个整数n,而结果余数则为num1 - n * num2;另外,你可能觉得,3.2 % 2 的结果应该是1.2,为什么会是1.20000000000000002呢?首先3.2%2的结果应该是double型的(因为java中默认被余数3.2为double型,根据运算时的自动类型提升,取余结果也应该是double型);其次,1.2也是double型呀,为什么结果就不是1.2呢?原因是,我们在输入的数据1.2(double型),在计算机存储结果其实是1.20000000000000000(含一定位数的有效数字),但也可能存储的结果会出现一点点儿差错,就变成了1.20000000000000002。这个结果其实跟1.2的误差特别特别小,小到不会影响计算,小到可以忽略并且它还是一偶然误差,不一定每次都出现且每次出现的误差值也不一定一致!
希望可以帮到您,有什么说的不对的,还请批评指正,共同进步!

评分

参与人数 1技术分 +1 收起 理由
简★零度 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 赵青超 于 2013-12-8 16:47 编辑
  1.         //浮点数很少能够精确运算 ,可能会出现舍入误差,
  2.                 //取模运算由以下测试可以看出规律
  3.                 System.out.println(5%3); // 1   int型,取余后浮点数四舍五入为整数
  4.                 System.out.println(5%3.2);// 1.7999999999999998    浮点数,结果也为浮点数,下同。
  5.                 System.out.println(5.2%3);// 2.2
  6.                 System.out.println(5.2%3.2);// 2.0
复制代码

评分

参与人数 1技术分 +1 收起 理由
简★零度 + 1

查看全部评分

回复 使用道具 举报
double数据类型结果输出也是double类型了。
public class Remainder {
        public static void main(String[] args) {
                double d=37;
                int i=37;
                long l=37;
        System.out.println(d% 5);//输出2.0
                  System.out.println(i % 5);//输出2
        }
}

评分

参与人数 1技术分 +1 收起 理由
简★零度 + 1

查看全部评分

回复 使用道具 举报
3.2 % 2 =1.20000000000000002
5 % 2.2 = 0.5999999999999996

你这两个是double类型的运算!!!

算出的值肯定也是double类型的。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马