为什么浮点除法会返回整数结果(Java / Android)

问题描述 投票:0回答:3

我重新编译了我的绘图应用程序以使用磨损OS,但出现了故障。该应用程序显示网格和波形,但波形构造错误。在磨损中,网格更加粗糙,并且该误差显而易见。我已经显示了原始代码并对其进行了修改下面的顺序。

// scale Y coordinate. Input,  elevation in feet.
// Output, y position of elevation in screen coordinate

static float scaleY(double elevation) {
    double a, b, c, offsetFromTopFeet, pixelRange, feetRange, pixelsPerFoot,offsetFromTopPixels;

    // original coding
    a = maxY - elevation;              //point in terms of feet within vert scale.
    b = (bottom - top) / (maxY - minY);
    c = top + (float) (a * b);
    // return (float)c;

    // new coding
    offsetFromTopFeet = maxY - elevation;        // a
    pixelRange = bottom - top;
    feetRange = maxY - minY;
    pixelsPerFoot = pixelRange / feetRange;     // b
    offsetFromTopPixels = top + offsetFromTopFeet * pixelsPerFoot;

    return (float) offsetFromTopPixels;
}

即使变量是双精度值,原始编码中b的计算也会返回整数结果。这就是使波形失真的原因。在下面显示的重构代码中,正确计算了pixelPerFoot变量,并正确显示了图形。我已经在Android应用程序中使用此例程很多年了,或者我从未注意到问题,更精细的网格覆盖了它,还是其他?]

我的问题是为什么b计算返回一个整数,而pixelPerFoot返回正确的类型?这是编程错误吗?

我重新编译了我的绘图应用程序以使用磨损OS,但出现了故障。该应用程序显示网格和波形,但波形构造错误。在磨损中,网格更粗糙,并且此...

java android calculation
3个回答
1
投票

表达式(bottom - top) / (maxY - minY);的类型为int,因为两个int的减法是int,并且将int除以int也是int。结果分配给的变量类型无关紧要;使用整数算术执行计算,然后在截断后将其转换为浮点值。


0
投票

对于这一行代码:


0
投票

所有组件都是int,您需要强制转换,例如(double)feetRange分母中的范围

© www.soinside.com 2019 - 2024. All rights reserved.