3

所以我这段代码,基本上是对变量应用简单的数学算术。rrdistance、qsdistance、heartrate 给出了理想的值,而 pamp 和 qamp 没有。我认为它圆了?假设在 i = 1 时,trial[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);


    }
}

帕普=帕普;Qamp = qamp;

坐标.setText("" + pamp + "," + qamp + " ");

4

2 回答 2

3

问题几乎可以肯定是试验、Pycoor、Qycoor 和 FINALBOXWIDTH 项的声明。如果这些是整数(几乎可以肯定它们来自您的结果),那么:

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

现在,我实际上并不知道试验中的值等,因为您没有提供它们(不过,您已经提供了它们,并且它验证了我的工作),但尝试将这两行更改为:

  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));
于 2013-02-24T02:42:02.307 回答
-1

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

pamp = (( (trial[1] - Pycoor[i]) / FINALBOXWIDTH(bitmap_Source))  * 0.1f);
qamp = (( (Qycoor[i] - trial[i]) / FINALBOXWIDTH(bitmap_Source)) *0.1f);
于 2013-02-24T02:47:20.910 回答