在Java中使用以下代码:
double operation = 890 / 1440;
System.out.println(operation);
结果: 0.0
我想要的是保存此操作的前4个十进制数字(0.6180)。你知道我该怎么办?
答案 0 :(得分:16)
使用表达式初始化变量,该表达式的计算结果为double而不是int:
double operation = 890.0 / 1440.0;
否则表达式使用整数运算(最终截断结果)完成。然后,截断的结果将转换为double
。
答案 1 :(得分:10)
您可以使用双重文字d
- 否则您的数字会被视为int
类型:
double operation = 890d / 1440d;
然后您可以使用NumberFormat
指定位数。
例如:
NumberFormat format = new DecimalFormat("#.####");
System.out.println(format.format(operation));
答案 2 :(得分:5)
答案 3 :(得分:3)
这是使用BigDecimal
完成的 import java.math.BigDecimal;
import java.math.RoundingMode;
public class DecimalTest {
/**
* @param args
*/
public static void main(String[] args) {
double operation = 890.0 / 1440.0;
BigDecimal big = new BigDecimal(operation);
big = big.setScale(4, RoundingMode.HALF_UP);
double d2 = big.doubleValue();
System.out.println(String.format("operation : %s", operation));
System.out.println(String.format("scaled : %s", d2));
}
}
输出
操作:0.6180555555555556 缩放:0.6181
答案 4 :(得分:2)
BigDecimal虽然非常笨拙,但提供了一些格式化选项:
BigDecimal first = new BigDecimal(890);
BigDecimal second = new BigDecimal(1440);
System.out.println(first.divide(second, new MathContext(4, RoundingMode.HALF_EVEN)));
答案 5 :(得分:1)
double operation = 890.0 / 1440;
System.out.printf(".4f\n", operation);
答案 6 :(得分:0)
如果你真的想要舍入到前4个小数位,你也可以先使用第一个数字乘以整数运算,这样它的数字就会向右移动f位置到左边:
long fractionalPart = 10000L * 890L / 1440L;
我在这里使用很长时间以避免任何溢出,以防临时结果不适合32位。