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来四舍五入。
浙公网安备 33010602011771号