java string价格处理_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来四舍五入。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值