我是Java新手。我想每隔15度打印出sin
,cos
和tan
值。
public class W3Aufgabe5 {
public static void main(String[] args) {
System.out.printf("%6s%6s%6s%6s%n", "Angle", "Sin", "Cos", "Tan");
System.out.println("------------------------");
for (float angle = 0; angle <= 180; angle += 15) {
float sin = Math.sin(Math.toRadians(angle));
float cos = Math.cos(Math.toRadians(angle));
float tan = Math.tan(Math.toRadians(angle));
System.out.printf("%6d%6d%6d%6d%n", angle, sin, cos, tan);
}
}
}
对于每个Math.x()
行,编译器打印
错误:可能损失精度
要求:浮动
发现:双
我真的不明白。即使我一直使用double
,为什么还需要float
?
答案 0 :(得分:4)
三角学方法sin
,cos
,tan
和toRadians
都接受double
作为参数并返回double
。没有重载接受float
并返回float
。将float
传递给期望double
的方法是合法的;它将被隐含地扩大。但是,当您将结果分配给double
时,您无法隐式地将float
缩小为float
。
如果需要,您可以将结果明确地转换为float
,但使用double
可以获得更好的精确度,因此请声明sin
,cos
和{{1变量为tan
s。
此外,格式说明符double
表示整数值,而不是浮点值。使用format specifier f
instead of d
。您可能还希望在打印时在值之间放置一些间距。
答案 1 :(得分:1)
如果查看API documentation,您会看到trig方法都将返回双精度数。除非你真的需要一个浮动,否则最好的选择是使用双打。您将失去精度,因为您必须将双返回值强制为浮点数。