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

背景:今天一个同学在看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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值