如何强制Float只有四个小数位

时间:2014-07-04 12:58:03

标签: java-me floating-point

如何使浮点数最多只有4位小数。 在我的J2ME应用程序中,我有两个字段:unitPrice(4位小数)和数量(3位小数),当我乘以它时,我得到的数字小于我需要的小数:

unitPrice :5.6538
quantity: 5

result: 28.269001

如果只得到4位小数,我该怎么办?一般来说,我需要做什么才能使用具有特定小数位数的浮点数。

2 个答案:

答案 0 :(得分:1)

当然,如果您使用的是Java SE,解决方案将是BigDecimal。

您可以按以下程序中的result初始化所示进行舍入:

import java.math.BigDecimal;

public class Test {
  public static void main(String args[]) {
    float unitPrice = 5.6538f;
    float quantity = 5;
    float rawResult = quantity*unitPrice;
    System.out.println(rawResult);
    float result = Math.round(10000f*rawResult)/10000f;
    System.out.println(result);
    System.out.println(new BigDecimal(result));
  }
}

输出结果为:

28.269001
28.269
28.2689990997314453125

不幸的是,正如使用BigDecimal的最终打印输出所示,result并不完全是28.2​​69。 28.269在任何二进制分数格式中都不能完全表示。如果小数部分非常重要,这可能会影响未来的计算。

作为替代方案,考虑用整数做所有事情,每种类型的数据都有一个相关的十次幂因子。对于单价,因子将是10,000。对于数量,它将是1000.

对于产品,您希望它为10,000。进行乘法的中间结果将具有10 ^ 7的因子,因此除以1000并舍入为整数。

答案 1 :(得分:0)

在vb6.0中我们可以使用RonudOff()函数进行此操作; 例: unitPrice:5.6538 数量:5

结果:28.269001 然后“RounOff(结果)”将给出28.2690;

我认为他们可能在java中也有类似的功能

感谢