Java 值结果无意中向上舍入?

Java 值结果无意中向上舍入?,java,android,decimal,Java,Android,Decimal,所以我写了这段代码,基本上是对变量应用简单的数学算法。rrdistance、qsdistance、心率给出了理想的值,而pamp和qamp则没有。我想是吧?假设,在i=1时,试验[1]的值为120,Pycoor[1]为102,Qycoor[1]为134。FINALBOXWIDTH(位图_源)为10 因此,pamp=((120-102)/10)*0.1=0.18,而qamp=((134-120)/10)*0.1=0.14的预期结果 我不明白为什么它们都显示pamp=0.1和qamp=0.1 sta

所以我写了这段代码,基本上是对变量应用简单的数学算法。rrdistance、qsdistance、心率给出了理想的值,而pamp和qamp则没有。我想是吧?假设,在i=1时,试验[1]的值为120,Pycoor[1]为102,Qycoor[1]为134。FINALBOXWIDTH(位图_源)为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


坐标.setText(“+pamp+”,“+qamp+”)

问题几乎可以肯定是试验、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));

这可能是因为您使用的数据类型。
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);

请提供此处显示的所有变量/参数的数据类型。这些变量是如何声明的?可能有一些整数?我编辑了代码,添加了数据类型@commonwarethere这里没有显示任何内容的代码。这里仍然没有显示任何内容的代码。这不是一个真正的问题。我尝试了你的建议,但是qamp显示了0.18000000000002,qamp是0.13999999@Bill JamesOk,这是错误的吗?trial[1]、Pycoor[1]和Qycoor[1]的值是多少?FINALBOXWIDTH调用的结果是什么?我可以做些什么使其仅为0.18和0.14?这没有错。我只想有两个小数位?180000000002看起来不太好(如果0.18和0.14更符合您的预期,那没关系。您可以在显示它们时更改它们,而不是在变量中。您可以使用类似于格式化程序的东西。我将编辑上面的内容,如果这是一个整数数学问题,“将“0.1声明为浮点”为时已晚,而且没有必要,因为它已经是一个浮点数字。