我需要将float格式化为“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
.
10 回答
您也可以传递浮点值,并使用:
String.format("%.2f", floatValue);
Documentation
看看DecimalFormat . 您可以轻松地使用它来取一个数字并给它一组小数位 .
编辑:Example
试试这个对我帮助很大
结果将是圆形的价格 - > 5652.26
值得注意的是,不鼓励使用
DecimalFormat
构造函数 . 这个类的javadoc说明:https://docs.oracle.com/javase/8/docs/api/java/text/DecimalFormat.html
所以你需要做的是(例如):
这是使用Nick提到的
DecimalFormat
类的快速示例 .print语句的输出为12.35 . 请注意,它将为您舍入它 .
有点惊讶没有人指出这样做的直接方式,这很容易 .
可以肯定的是,这并不能实现半均匀的舍入 .
对于它的 Value ,只要将基于二进制的浮点值与基数为10的算法混合,半均匀舍入就会变得混乱和不可预测 . 我很确定它无法完成 . 基本问题是像1.105这样的值不能用浮点表示 . 浮点值将类似于1.105000000000001或1.104999999999999 . 因此,任何执行半偶数舍入的尝试都会在代表性编码错误上绊倒 .
IEEE浮点实现将进行半舍入,但它们执行二进制半舍入,而不是十进制半舍入 . 所以你可能还好
这是一种更不专业,更昂贵的方式,但它应该更容易理解,对初学者更有帮助 .
我想你想要的是什么
并使用返回值来显示 .
将永远返回625.3,因为它主要用于计算某些东西 .
我正在寻找这个问题的答案,后来我开发了一种方法! :)一个公平的警告,它正在四舍五入 .