js中的大小比较

各种数据的比较在日常工作中见的多的不能再多,可是有时候仍然会犯一些错误。这些错误在大多数情况下并不会出现,甚至运转相当正常,可是碰到一些也是常见但是考虑不到的情况时,我们会很纠结一段子,因为前面运行的很好,逻辑也是正确的,怎么知道到底哪儿出了错。。。
正是由于这种“逻辑正确”的想法,让我们在日常工作中忽略了相当一部分的问题:类型不一致。今天碰到的问题是,在js中查询出了某个单子两个工作节点里人员的数量,当前面某一设定为2的时候,在approve这个节点需要所有人都在才能进行approve 操作。但是当上载人名单总共19个人,其他节点有10个,当前节点有九个时,点击approve竟然能直接通过而没有触发校验!逻辑上讲,19>9,肯定不会有问题啊,那么原因出在那里呢?
仔细观察发现,我们给存储19和9这两个值的变量赋值的时候,是使用数据库查询出的结果集取出后直接赋值,而js中存储数据库查询结果的时候,只有特殊字段,其余字段,如数字和字符串,全部使用的字符串存储。于是乎我们这两个字段也都是用字符串存储的19和9.即,比较时实际上比较的是’19’>’9’,在字符串的比较中,是按字符比较,那么首先比较的是’1’与’9’的大小。于是。。。’19’>’9’这个比较的结果是false而不是true!
出现这种现象的原因并不是说多么高深的问题,其实只是我们日常工作习惯得问题。一般情况下,用字符串存储数字需要比较大小时,最好的方式还是转化成数字。不只是js,数据库中也有很多数字是用字符串来存储的情况,这时候的操作就需要我们尤其小心。否则,就真是南辕北辙了。
解决方式:假设以上两个变量用a和b来进行存储,那么在比较之前,写上如下两个语句:
a = a * 1;
b = b* 1;
这两句看起来毫不起眼,但是将原来的String a和String b全都转化成了 number a 和 number b,这样19与9的比较必然不会出现问题!
细节是魔鬼啊!

Java对数字取整

现实操作中有很多需要取整的地方,取小数位数的地方,比如一个班有n个人,想要4人一组分组,那么组数是多少?n除以4向上取整;比如内部计算时需要小数点后尽可能多的位数,但是财务只需要两位小数,需要截取;比如内部计算的时候为了精确,计算过程中所用数字小数位数至少要比显示位数多,那么显示和存储的时候都需要对数字进行截取。
这些取整和截取的过程可能发生在页面的脚本中或者java程序中或者sql语句中。这段时间就碰到一个问题,就类似于上面提到的班级学生分组的问题。数字的运算自然不是问题,想要通过自己写的代码获得应该有的组数也没问题,但是java已经提供了现成的方法,自己就不要再做一些无用功了。
java里取整的函数有以下三个:
Math.floor();Math.ceil()和BigDecimal。虽然都是取整函数,但是方法的意义和返回值却是不一样的。
用法分别如下:
Math.floor()
通过该函数计算后的返回值是舍去小数点后的数值
如:Math.floor(3.2)返回3
Math.floor(3.9)返回3
Math.floor(3.0)返回3
Math.ceil()
ceil函数只要小数点非0,将返回整数部分+1
如:Math.ceil(3.2)返回4
Math.ceil(3.9)返回4
Math.ceil(3.0)返回3
BigDecimal四舍五入
传统的四舍五入,在Math类中并没有直接提供,必须使用Java.math.BigDecimal类来实现
new BigDecimal(“2.0”).setScale(0, BigDecimal.ROUND_HALF_UP)返回2
new BigDecimal(“2.4”).setScale(0, BigDecimal.ROUND_HALF_UP)返回2
new BigDecimal(“2.5”).setScale(0, BigDecimal.ROUND_HALF_UP)返回3

今儿状态由点怪

最近状态有点奇怪。
昨天顺手把手里的bug清掉了,现在没有活做,所以决定在公司继续做自己那个小东西。
仔细的梳理过自己现在已经具备的知识,话说高中时候年纪主任有次在升旗仪式上讲话,说过一句:似是而非就是非,现在我是深刻的理解到了。目前自己算是熟悉的东西,列举下来:java,html,javascript,sql,jsp技术(其中的jsp servlet由于长时间没用还基本忘光了),css是做前台都应该熟悉的东西,但是由于现在的工作里,一般都涉及不到界面美化,所以css基本不靠谱了。ExtJS曾经学过,基本忘光了,所以现在又重新开始学,JQuery前段时间刚看过,但是没怎么有用的机会,现在基本上也还回去了。以前学过的东西大概唯一的好处就是,在用的时候知道这是个神马玩意,然后知道从哪儿下手去查查。其实这样干起活来没啥问题,可是你去一个公司的时候,人家才不会给你机会让你在笔试面试的时候上网去查东西呢。SSH三大框架,目前接触过的也就Struts,还处于很初级的那个阶段。
好,弄清楚自己当前状况,那就得继续往下做了。本地继续ExtJS,版本4.04吧还是,教程使用3.0的,那个比较详细。
动手搭建本地环境`~