10% |
您所在的位置:网站首页 › 九十九十除以十 › 10% |
背景:今天一个同学在看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)*y);//取余运算公式输出结果为:-2.0呼~终于算对了。 这题的关键在于,是对 10除以-3的结果 也就是 -3.33333 进行 向下取整,结果为-4。 之前的设计:System.out.println(Math.floor(10/(-3))); 是对 10整除-3的结果 也就是-3 进行向下取整,所以结果为-3.0; 所以,最后的结论就是:10除以-3 等于 -4 余 -2 。而我们java中取余运算,不能全部都靠取余运算符(%),小学数学知识还是很关键的。 结语:emmmm,我真的对不起我的小学数学老师,当时应该好好学习的。[手动滑稽] 感谢我的高数老师,为我排异解惑。[狗头] 2018-10-22 00:01:34
|
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |