这个问题在这里已经有答案了:
8年前关门了。可能重复:在java中,将双精度舍入到小数点后两位我想把这个双精度值四舍五入到小数点后2位。例如:我有双d=2;结果应该是result=2.00
roqulrg31#
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)); } }
ndh0cuux2#
您也可以使用此代码
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
我觉得会有帮助
j2cgzkjk3#
double RoundTo2Decimals(double val) { DecimalFormat df2 = new DecimalFormat("###.##"); return Double.valueOf(df2.format(val)); }
n3h0vuf24#
Math.round(number*100.0)/100.0;
fd3cxomn5#
2和2.00之间的内部表示没有区别。你可以用 Math.round 要将一个值四舍五入到最接近的整数-要将该值四舍五入到小数点后2位,可以先乘以100,再四舍五入,然后再除以100,但由于二进制浮点运算的性质,您不应该期望结果正好是2dps。如果您只想将值格式化为两位小数,请查看 DecimalFormat -如果你在计算的时候对小数位数感兴趣的话,你真的应该使用 BigDecimal . 这样你就会知道你真正在处理的是十进制数字,而不是“最接近的可用数字” double 价值观”。如果您总是处理两个小数位,您可能需要考虑的另一个选项是将值存储为 long 或者 BigInteger ,知道它正好是“真实”价值的100倍——例如,有效地存储美分而不是美元。
Math.round
DecimalFormat
BigDecimal
double
long
BigInteger
yfjy0ee76#
我想你需要一个格式化的输出。
System.out.printf("%.2f",d);
4zcjmb1e7#
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(); }
bxjv4tth8#
这样就行了。
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); }
你可以缩短这个方法,它很容易理解,这就是为什么我这样写。
8条答案
按热度按时间roqulrg31#
ndh0cuux2#
您也可以使用此代码
它可以让你控制点后需要多少数字。
我觉得会有帮助
j2cgzkjk3#
n3h0vuf24#
fd3cxomn5#
2和2.00之间的内部表示没有区别。你可以用
Math.round
要将一个值四舍五入到最接近的整数-要将该值四舍五入到小数点后2位,可以先乘以100,再四舍五入,然后再除以100,但由于二进制浮点运算的性质,您不应该期望结果正好是2dps。如果您只想将值格式化为两位小数,请查看
DecimalFormat
-如果你在计算的时候对小数位数感兴趣的话,你真的应该使用BigDecimal
. 这样你就会知道你真正在处理的是十进制数字,而不是“最接近的可用数字”double
价值观”。如果您总是处理两个小数位,您可能需要考虑的另一个选项是将值存储为
long
或者BigInteger
,知道它正好是“真实”价值的100倍——例如,有效地存储美分而不是美元。yfjy0ee76#
我想你需要一个格式化的输出。
4zcjmb1e7#
bxjv4tth8#
这样就行了。
你可以缩短这个方法,它很容易理解,这就是为什么我这样写。