码迷,mamicode.com
首页 > 编程语言 > 详细

java中 10%-3 = -2 运算记录

时间:2018-10-22 01:15:47      阅读:878      评论:0      收藏:0      [点我收藏+]

标签:The   小学   ble   show   怎么   --   floor   多少   策略   

背景:今天一个同学在看python看到一个问题 10%-3的结果是多少,我心中默默出现了1这个结果,

因为很明显 10=(-3)*(-3).....1 ,但是,书上写的结果是-2;于此产生分歧。

 

检验方法:首先,我是接受不能的,怎么可能呢,于是就写了一个方法测试一下,毕竟 talk is cheap ,show me the code.

方法很简单,直接输出一下,不就行了嘛,

System.out.println(10%-3);

不出所料,结果为 1;

难道书上写错了,秉承多次验证的严谨编程精神,我去询问了百度和我的高数老师[手动滑稽],然后发现没百度到,

于是查了一下余数的定义:(https://baike.baidu.com/item/%E4%BD%99%E6%95%B0/6180737?fr=aladdin
在整数的除法中,只有能整除与不能整除两种情况。当不能整除时,就产生余数,所以余数问题在小学数学中非常重要
(划重点:小学数学。我对不起我的小学数学老师。)。

另外百度买一送一,还有取余运算的定义。

取余数运算:
a mod b = c 表示 整数a除以整数b所得余数为c。
余数的计算公式:c = a -? a/b? * b
其中,? ?为向下取整运算符,向下取整运算称为Floor,用数学符号? ?表示

敲黑板,重点,向下取整

在这时,高数老师上场了,他给了具体的回应,按照这个定义 10对-3进行取整的结果 是 -4。

此时的我一脸懵逼,不应该啊。默默敲了一个输出:
System.out.println(10/(-3));
对,秉承严谨的编程精神,我给-3加上了括号。然而并没有拯救我,结果是 -3。
然后,老师就开始讲解概念:向下取整 ,-3点多 应该为 -4。 我默默打开了百度,java 向下取整。
查询结果:
向上取整用Math.ceil(double a)

向下取整用Math.floor(double a)
哦~,原来如此,验证一下,

编写输出方法,System.out.println(Math.floor(10/(-3)));
这下应该正确了吧。
Native,输入结果 :-3.0;

emmm,什么鬼,经过数学老师的讲解,再次感谢高数老师,对一个毕业的学生还有这么好的耐心[手动狗头]。

正确的运算策略应该是:对10除以-3的运算结果,进行向下取整 ,也就是对 -3.33333进行向下取整,结果是 -4。
带入取余公式:c = a -? a/b? * b --> c = 10 - (-4)*-3 = -2。
综合起来就是:10 ÷ -3 = -4…-2 。
unbelievable,可以百度一下余数,看一下余数的性质,验证一下,是否符合。

这是一道严肃的编程题,所以在确定了运算策略后,重新设计输出:
double x=10;
double y= -3;
System.out.println(x - Math.floor(x/y)*-3);
输出结果为:-2.0
呼~终于算对了。 这题的关键在于,是对 10除以-3的结果 也就是 -3.33333 进行 向下取整,结果为-4。

之前的设计:System.out.println(Math.floor(10/(-3)));

是对 10整除-3的结果 也就是-3 进行向下取整,所以结果为-3.0;

所以,最后的结论就是:10除以-3 等于 -4 余 -2 。

结语:
emmmm,我真的对不起我的小学数学老师,当时应该好好学习的。[手动滑稽]

感谢我的高数老师,为我排异解惑。[狗头]

2018-10-22 00:01:34

 

java中 10%-3 = -2 运算记录

标签:The   小学   ble   show   怎么   --   floor   多少   策略   

原文地址:https://www.cnblogs.com/BigWrite/p/9827744.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!