【发布时间】:2011-05-10 06:04:16
【问题描述】:
【问题讨论】:
-
它似乎是从下面的链接roseindia.net/answers/viewqa/Java-Beginners/…复制的问题@
-
你应该接受一些答案!
-
感谢您的建议,这是我的要求,我不会从任何地方复制。
标签: java
【问题讨论】:
标签: java
Math.round(number*100.0)/100.0;
【讨论】:
double RoundTo2Decimals(double val) {
DecimalFormat df2 = new DecimalFormat("###.##");
return Double.valueOf(df2.format(val));
}
【讨论】:
2 和 2.00 之间的内部表示没有区别。您可以使用 Math.round 将值四舍五入到最接近的整数 - 将该值舍入到小数点后 2 位,您可以乘以 100,四舍五入,然后除以 100,但您不应期望结果为 由于二进制浮点运算的性质,正好 2dps。
如果您只对格式化到小数点后两位的值感兴趣,请查看DecimalFormat - 如果您在计算时对小数位数感兴趣 你真的应该使用BigDecimal。这样你就会知道你确实在处理十进制数字,而不是“最接近的可用 double 值”。
如果您总是处理两位小数,您可能需要考虑的另一个选项是将值存储为 long 或 BigInteger,因为它知道它正好是 "真实”价值 - 例如,有效地存储美分而不是美元。
【讨论】:
k 不会完全 4.144456 开始。如果精确的十进制值对您很重要,您不应该使用double。
int decimalPlace = 0; BigDecimal bd = new BigDecimal(someDoubleNumber); bd = bd.setScale(decimalPlace, BigDecimal.ROUND_HALF_UP);987654331@的输出不对应
double?我说的是精确十进制值很重要的情况——尤其是货币等“人造”值。 double 适用于自然构造,例如身高、体重等。
import java.text.DecimalFormat;
public class RoundTest {
public static void main(String[] args) {
double i = 2;
DecimalFormat twoDForm = new DecimalFormat("#.00");
System.out.println(twoDForm.format(i));
double j=3.1;
System.out.println(twoDForm.format(j));
double k=4.144456;
System.out.println(twoDForm.format(k));
}
}
【讨论】:
我猜你需要一个格式化的输出。
System.out.printf("%.2f",d);
【讨论】:
你也可以使用这个代码
public static double roundToDecimals(double d, int c)
{
int temp = (int)(d * Math.pow(10 , c));
return ((double)temp)/Math.pow(10 , c);
}
它使您可以控制点后需要多少个数字。
d = number to round;
c = number of decimal places
觉得会有帮助
【讨论】:
这样就可以了。
public static void main(String[] args) {
double d = 12.349678;
int r = (int) Math.round(d*100);
double f = r / 100.0;
System.out.println(f);
}
这个方法可以简写,很容易理解,所以写成这样。
【讨论】:
public static double addDoubles(double a, double b) {
BigDecimal A = new BigDecimal(a + "");
BigDecimal B = new BigDecimal(b + "");
return A.add(B).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
}
【讨论】: