打字猴:1.700440158e+09
1700440158
1700440159 public static void main(String[]args){
1700440160
1700440161 NumberFormat f=new DecimalFormat(”#.##”);
1700440162
1700440163 System.out.println(f.format(10.00-9.60));
1700440164
1700440165 }
1700440166
1700440167 }
1700440168
1700440169 打印出结果是0.4,看似解决了,但是隐藏了一个很深的问题。我们来思考一下金融行业的计算方法,会计系统一般记录小数点后的4位小数,但是在汇总、展现、报表中,则只记录小数点后的2位小数,如果使用浮点数来计算货币,想想看,在大批量的加减乘除后结果会有多大的差距(其中还涉及后面会讲到的四舍五入问题)!会计系统要的就是准确,但是却因为计算机的缘故不准确了,那真是罪过。要解决此问题有两种方法:
1700440170
1700440171 (1)使用BigDecimal
1700440172
1700440173 BigDecimal是专门为弥补浮点数无法精确计算的缺憾而设计的类,并且它本身也提供了加减乘除的常用数学算法。特别是与数据库Decimal类型的字段映射时,BigDecimal是最优的解决方案。
1700440174
1700440175 (2)使用整型
1700440176
1700440177 把参与运算的值扩大100倍,并转变为整型,然后在展现时再缩小100倍,这样处理的好处是计算简单、准确,一般在非金融行业(如零售行业)应用较多。此方法还会用于某些零售POS机,它们的输入和输出全部是整数,那运算就更简单。
1700440178
1700440179
1700440180
1700440181
1700440182 编写高质量代码:改善Java程序的151个建议 [:1700438091]
1700440183 编写高质量代码:改善Java程序的151个建议 建议23:不要让类型默默转换
1700440184
1700440185 我们出一个小学生的题目给大家做做看,光速是每秒30万公里,根据光线旅行的时间,计算月亮与地球、太阳与地球之间的距离。代码如下:
1700440186
1700440187 public class Client{
1700440188
1700440189 //光速是30万公里/秒,常量
1700440190
1700440191 public static final int LIGHT_SPEED=30*10000*1000;
1700440192
1700440193 public static void main(String[]args){
1700440194
1700440195 System.out.println(“题目1:月亮光照射到地球需要1秒,计算月亮和地球的距离。”);
1700440196
1700440197 long dis1=LIGHT_SPEED*1;
1700440198
1700440199 System.out.println(“月亮与地球的距离是:”+dis1+“米”);
1700440200
1700440201 System.out.println(”––––––––––––––—”);
1700440202
1700440203 System.out.println(“题目2:太阳光照射到地球上需要8分钟,计算太阳到地球的距离。”);
1700440204
1700440205 //可能要超出整数范围,使用long型
1700440206
1700440207 long dis2=LIGHT_SPEED*60*8;
[ 上一页 ]  [ :1.700440158e+09 ]  [ 下一页 ]