java价格处理的一个问题

 

  我们经常会处理一些价格,比如从运营上传的文件中将某个字段从字符串转为double类型,那么此时处理价格需要特别注意,比如4.6,我们通过Double.valueOf(value)来转换,然后系统是用分为单位来存储价格信息,那么我们会将(long)(Double.valueOf(value)*100)来存储,此时4.6存储到系统就变成459了,然后再转换回来就出错了。

 

public class FloatTest {
	
	public static void main(String[] args) {
		for(int i = 0; i < 10; i++){
			String value="4." + i;
			System.out.println(Double.valueOf(value) * 100);
//			System.out.println(Double.valueOf(Double.doubleToLongBits(Double.valueOf(value))) * 100);
			System.out.println((long)(Double.valueOf(value) * 100));
			System.out.println(Math.round(Double.valueOf(value) * 100));	
		}
	}

}

 

400.0
400
400
409.99999999999994
409
410
420.0
420
420
430.0
430
430
440.00000000000006
440
440
450.0
450
450
459.99999999999994
459
460
470.0
470
470
480.0
480
480
490.00000000000006
490
490

 4.1和4.6就出错了,正确方式应该用Math.round来四舍五入。

posted @ 2013-03-26 21:17  zhwj184  阅读(235)  评论(0编辑  收藏  举报