打字猴:1.700440112e+09
1700440112
1700440113 -1->偶数
1700440114
1700440115 -2->偶数
1700440116
1700440117 前三个还很靠谱,第四个参数-1怎么可能会是偶数呢,这Java也太差劲了,如此简单的计算也会错!别忙着下结论,我们先来了解一下Java中的取余(%标示符)算法,模拟代码如下:
1700440118
1700440119 //模拟取余计算,dividend被除数,divisor除数
1700440120
1700440121 public static int remainder(int dividend, int divisor){
1700440122
1700440123 return dividend-dividend/divisor*divisor;
1700440124
1700440125 }
1700440126
1700440127 看到这段程序,相信大家都会心地笑了,原来Java是这么处理取余计算的呀。根据上面的模拟取余可知,当输入-1的时候,运算结果是-1,当然不等于1了,所以它就被判定为偶数了,也就是说是我们的判断失误了。问题明白了,修正也很简单,改为判断是否是偶数即可,代码如下:
1700440128
1700440129 i%2==0?“偶数”:“奇数”
1700440130
1700440131 注意 对于基础知识,我们应该“知其然,并知其所以然”。
1700440132
1700440133
1700440134
1700440135
1700440136 编写高质量代码:改善Java程序的151个建议 [:1700438090]
1700440137 编写高质量代码:改善Java程序的151个建议 建议22:用整数类型处理货币
1700440138
1700440139 在日常生活中,最容易接触到的小数就是货币,比如你付给售货员10元钱购买一个9.60元的零食,售货员应该找你0.4元也就是4毛钱才对,我们来看下面的程序:
1700440140
1700440141 public class Client{
1700440142
1700440143 public static void main(String[]args){
1700440144
1700440145 System.out.println(10.00-9.60);
1700440146
1700440147 }
1700440148
1700440149 }
1700440150
1700440151 我们期望的结果是0.4,也应该是这个数字,但是打印出来的却是0.40000000000000036,这是为什么呢?
1700440152
1700440153 这是因为在计算机中浮点数有可能(注意是可能)是不准确的,它只能无限接近准确值,而不能完全精确。为什么会如此呢?这是由浮点数的存储规则所决定的,我们先来看0.4这个十进制小数如何转换成二进制小数,使用“乘2取整,顺序排列”法(不懂?这就没招了,太基础了),我们发现0.4不能使用二进制准确的表示,在二进制数世界里它是一个无限循环的小数,也就是说,“展示”都不能“展示”,更别说是在内存中存储了(浮点数的存储包括三部分:符号位、指数位、尾数,具体不再介绍),可以这样理解,在十进制的世界里没有办法准确表示1/3,那在二进制世界里当然也无法准确表示1/5(如果二进制也有分数的话倒是可以表示),在二进制的世界里1/5是一个无限循环小数。
1700440154
1700440155 各位要说了,那我对结果取整不就对了吗?代码如下:
1700440156
1700440157 public class Client{
1700440158
1700440159 public static void main(String[]args){
1700440160
1700440161 NumberFormat f=new DecimalFormat(”#.##”);
[ 上一页 ]  [ :1.700440112e+09 ]  [ 下一页 ]