价值结果无意中四舍五入?

时间:2013-02-24 02:35:25

标签: java android decimal

所以我这个代码,基本上将简单的数学算法应用于变量。 rrdistance,qsdistance,heartrate给出了理想的值,而pamp和qamp则没有。我认为它会结束?据推测,在i = 1时,试验[1]的值为120,Pycoor [1]为102,Qycoor [1]为134. FINALBOXWIDTH(bitmap_Source)为10.

因此pamp的预期结果=((120-102)/ 10)* 0.1 = 0.18而qamp =((134-120)/ 10)* 0.1 = 0.14

我不明白为什么他们都显示pamp = 0.1和qamp = 0.1。

static int[] Pxcoor = new int[50];
static int[] Pycoor = new int[50];
static int[] Qxcoor = new int[50];
static int[] Qycoor = new int[50];
static int[] Rxcoor = new int[50];
static int[] Rycoor = new int[50];
static int[] Sxcoor = new int[50];
static int[] Sycoor = new int[50];
static int[] Txcoor = new int[50];
static int[] Tycoor = new int[50];
    static int[] trial = new int[450];

public static int FINALBOXWIDTH(Bitmap src) {  ...
}

private void StratBackgroundProcess() {

if (i >= 2) {
  rrdistance += (((Rxcoor[i] - Rxcoor[i - 1]) / FINALBOXWIDTH(bitmap_Source)) * 0.04); 
  //durations in seconds
  printerval += (((Rxcoor[i] - Pxcoor[i]) / FINALBOXWIDTH(bitmap_Source)) * 0.04);
  qsdistance += (((Sxcoor[i] - Qxcoor[i]) / FINALBOXWIDTH(bitmap_Source)) * 0.04);
  heartrate += (1500 / (rrdistance / 0.04)); 

  //amplitude in mV
  pamp = (( (trial[1] - Pycoor[i]) / FINALBOXWIDTH(bitmap_Source))  * 0.1);
  qamp = (( (Qycoor[i] - trial[i]) / FINALBOXWIDTH(bitmap_Source)) *0.1);


    }
}

Pamp = pamp; Qamp = qamp;

coordinate.setText("" + pamp +"," + qamp +"");

2 个答案:

答案 0 :(得分:3)

问题几乎可以肯定是试验,Pycoor,Qycoor和FINALBOXWIDTH项目的宣布。如果这些是整数(并且几乎肯定来自你的结果),那么:

((120-102)/ 10)* 0.1 =(18/10)* 0.1 = 1(注意整数数学向下舍入)* 0.1 = 0.1

现在,我实际上并不知道试用中的值,等等,因为你没有提供它们(好吧,你从那以后,它验证了我的工作),但是尝试将这两行更改为:< / p>

  pamp = (( (trial[1] - Pycoor[i]) / (double)FINALBOXWIDTH(bitmap_Source))  * 0.1);
  qamp = (( (Qycoor[i] - trial[i]) / (double)FINALBOXWIDTH(bitmap_Source)) *0.1); 

注意我只是强制FINALBOXWIDTH为double类型,这将强制浮点运算。

请注意,您将获得双倍值,这些值并不总能很好地显示。试试这个:

DecimalFormat df = new DecimalFormat("#.##");
System.out.println(df.format(pamp));
System.out.println(df.format(qamp));

答案 1 :(得分:-1)

这可能是因为您使用的数据类型 1.确保计算中涉及的所有变量的数据类型是float或double(或任何其他处理小数的数据类型,如Decimal,BigDecimal等)
2。每当在公式中使用浮点值时,都需要使用f指定它们。所以你的公式应该是

pamp = (( (trial[1] - Pycoor[i]) / FINALBOXWIDTH(bitmap_Source))  * 0.1f);
qamp = (( (Qycoor[i] - trial[i]) / FINALBOXWIDTH(bitmap_Source)) *0.1f);
相关问题