[英]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;
如果我是您,则将y
, m
, d
和h
都更改为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.