Java me 如何强制浮点只有四位小数
我怎样才能使一个浮点数最多只有4位小数。 在我的J2ME应用程序中,我有两个字段:单价(小数点后4位)和数量(小数点后3位),当我将它们相乘时,我得到的数字的小数位数比我需要的要多:Java me 如何强制浮点只有四位小数,java-me,floating-point,Java Me,Floating Point,我怎样才能使一个浮点数最多只有4位小数。 在我的J2ME应用程序中,我有两个字段:单价(小数点后4位)和数量(小数点后3位),当我将它们相乘时,我得到的数字的小数位数比我需要的要多: unitPrice :5.6538 quantity: 5 result: 28.269001 我该怎么做才能得到只有4位小数的结果?一般来说,我需要做什么才能使用具有特定小数位数的浮点。在vb6.0中,我们可以使用RonudOff()函数进行此操作; 例子: 售价:5.6538 数量:5 结果:28.2690
unitPrice :5.6538
quantity: 5
result: 28.269001
我该怎么做才能得到只有4位小数的结果?一般来说,我需要做什么才能使用具有特定小数位数的浮点。在vb6.0中,我们可以使用RonudOff()函数进行此操作; 例子: 售价:5.6538 数量:5 结果:28.269001 然后“RounOff(result)”将给出28.2690 我认为它们在java中可能也有类似的功能
谢谢当然,如果您使用的是Java SE,那么解决方案将是BigDecimal 您可以在以下程序中按
结果初始化所示进行取整:
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的最终打印结果所示,结果实际上并不完全是28.269。28.269不能以任何二进制分数格式精确表示。如果小数点真的很重要,这可能会影响未来的计算
作为一种选择,考虑在整数中做任何事情,每种类型的数据都具有十因子的关联幂。对于单价,系数为10000。数量是1000
对于产品,您希望它是10000。乘法的中间结果的因子为10^7,因此除以1000并四舍五入为整数。浮点数和双精度浮点不能以这种方式工作。请阅读。