繁体   English   中英

将python转换为Java float vs double

[英]converting python to java float vs double

我需要将以下python代码转换为Java,并从过去记住,必须小心处理十进制值,否则结果将不准确。 我的问题是,鉴于双精度浮点数更准确,我可以对所有非整数值都使用精度数吗?

这是我转换的开始:

Python代码

def degrees(rads):
    return (rads/pi)*180


def radians(degrees):
return (degrees/180 * pi)


def fnday(y, m, d, h):
a = 367 * y - 7 * (y + (m + 9) // 12) // 4 + 275 * m // 9
a += d - 730530 + h / 24
return a

Java转换

public double degress(double rads)
{
    return (rads/PI)*180;
}

public double radians(double degrees)
{
    return (degrees/180 * PI);
}

public double fnday(int y, int m, int d, int h)
{
    double a = 367 * y - 7 * (y + (m + 9) / 12) / 4 + 275 * m / 9;
    a += d - 730530 + h / 24;
    return a;
}

我知道这可能是一个简单的答案,但我需要了解该应用程序的月亮和太阳的位置,并且不想依赖于api来获取此数据。 我简单地想输入纬度和经度,以获取日月升起和设定时间。

对每个变量使用double精度即可。 但是,您有一个因整数除法导致的问题:

double a = 367 * y - 7 * (y + (m + 9) / 12) / 4 + 275 * m / 9;

如果我是您,则将ymdh都更改为double s,因此除法时,您保留小数位:

public double fnday(double y, double m, double d, double h) {
    double a = 367 * y - 7 * (y + (m + 9) / 12) / 4 + 275 * m / 9;

    a += d - 730530 + h / 24;

    return a;
}

如果需要非常大的精度,最好的方法是使用java.lang.BigDecimal ,它从java.math.Number扩展。

如果需要,您甚至可以使用现有的双打:

double d = 67.67;
BigDecimal bd = new BigDecimal(d);

但是您将需要使用此类的方法:

public BigDecimal degress(BigDecimal rads)
{
    BigDecimal pi = new BigDecimal(PI);
    return (rads.divide(pi))*180;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM