格式浮点数n个小数位

我需要格式化一个浮点数“n”小数位。

试图BigDecimal,但返回值是不正确的… … –

public static float Redondear(float pNumero, int pCantidadDecimales) { // the function is call with the values Redondear(625.3f, 2) BigDecimal value = new BigDecimal(pNumero); value = value.setScale(pCantidadDecimales, RoundingMode.HALF_EVEN); // here the value is correct (625.30) return value.floatValue(); // but here the values is 625.3 } 

我需要返回一个浮点值,我指定的小数位数。

我需要Float值返回不是Double

您也可以传递浮点值,并使用:

String.format("%.2f", floatValue);

文档

看看DecimalFormat 。 你可以很容易地使用它来取一个数字,并给它一个小数位数。

编辑 : 例子

试试这个帮了我很多

 BigDecimal roundfinalPrice = new BigDecimal(5652.25622f).setScale(2,BigDecimal.ROUND_HALF_UP); 

结果将是roundfinal价格 – > 5652.26

值得注意的是,不鼓励使用DecimalFormat构造函数。 这个类的javadoc指出:

通常,不要直接调用DecimalFormat构造函数,因为NumberFormat工厂方法可能会返回DecimalFormat以外的子类。

https://docs.oracle.com/javase/8/docs/api/java/text/DecimalFormat.html

所以你需要做的是(例如):

 NumberFormat formatter = NumberFormat.getInstance(Locale.US); formatter.setMaximumFractionDigits(2); formatter.setMinimumFractionDigits(2); formatter.setRoundingMode(RoundingMode.HALF_UP); Float formatedFloat = new Float(formatter.format(floatValue)); 

有点惊讶没有人指出直接的做法,这很容易。

 double roundToDecimalPlaces(double value, int decimalPlaces) { double shift = Math.pow(10,decimalPlaces); return Math.round(value*shift)/shift; } 

可以肯定的是,这并不能做到一半甚至四舍五入。

对于什么是值得的,只要将基于二进制的浮点值与基10算术混合,半双舍入就会变得混乱和不可预测。 我很确定这是无法完成的。 基本的问题是像1.105这样的值不能完全用浮点数表示。 浮点值将会是1.105000000000001或1.104999999999999。 因此,任何尝试执行半平均舍入都会导致代表性编码错误。

IEEE浮点实现将做半舍入,但他们做二进制半舍入,而不是小数半舍入。 所以你可能没问题

下面是使用Nick提到的DecimalFormat类的一个快速示例。

 float f = 12.345f; DecimalFormat df = new DecimalFormat("#.00"); System.out.println(df.format(f)); 

打印语句的输出将是12.35。 注意它会围绕你。

我想你想要的是什么

 return value.toString(); 

并使用返回值来显示。

 value.floatValue(); 

将永远返回625.3,因为它主要用来计算一些东西。

 public static double roundToDouble(float d, int decimalPlace) { BigDecimal bd = new BigDecimal(Float.toString(d)); bd = bd.setScale(decimalPlace, BigDecimal.ROUND_HALF_UP); return bd.doubleValue(); } 

这是一个不太专业和更昂贵的方式,但应该更容易理解,对初学者更有帮助。

 public static float roundFloat(float F, int roundTo){ String num = "#########."; for (int count = 0; count < roundTo; count++){ num += "0"; } DecimalFormat df = new DecimalFormat(num); df.setRoundingMode(RoundingMode.HALF_UP); String S = df.format(F); F = Float.parseFloat(S); return F; }