uno*_*uno 4 java datetime decimal fractions
我需要正确的公式,将小时转换为分钟,反之亦然.我编写了一个代码,但它似乎没有按预期工作.例如:如果我有小时= 8.16,那么分钟应该是490,但我得到的结果为489.
import java.io.*;
class DoubleToInt {
public static void main(String[] args) throws IOException{
BufferedReader buff =
new BufferedReader(new InputStreamReader(System.in));
System.out.println("Enter the double hours:");
String d = buff.readLine();
double hours = Double.parseDouble(d);
int min = (int) ((double)hours * 60);
System.out.println("Minutes:=" + min);
}
}
Run Code Online (Sandbox Code Playgroud)
那是因为强制转换int 截断小数部分 - 它不会绕过它:
8.16 * 60 = 489.6
Run Code Online (Sandbox Code Playgroud)
当施放时int,它变为489.
考虑使用Math.round()您的计算:
int min = (int) Math.round(hours * 60);
Run Code Online (Sandbox Code Playgroud)
注意:double精度有限并且遇到"小余量误差"问题,但使用Math.round()将很好地解决这个问题而不必处理麻烦BigDecimal(我们不在这里计算行星间火箭轨迹).
仅供参考,将分钟转换为小时,请使用:
double hours = min / 60d; // Note the "d"
Run Code Online (Sandbox Code Playgroud)
你需要"d"才能60生成60 a double,否则它就是a int,你的结果int也是如此,这使得hours整数加倍.通过使其成为a double,您可以将Java up-cast min设置为double,以进行计算,这正是您想要的.
| 归档时间: |
|
| 查看次数: |
15836 次 |
| 最近记录: |