seb*_*neo 216 java format floating-point android numbers
我需要将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
}
Run Code Online (Sandbox Code Playgroud)
我需要返回一个浮点值,其中包含我指定的小数位数.
我不需要Float价值回报Double
.
Anu*_*pam 16
试试这个对我帮助很大
BigDecimal roundfinalPrice = new BigDecimal(5652.25622f).setScale(2,BigDecimal.ROUND_HALF_UP);
Run Code Online (Sandbox Code Playgroud)
结果将是圆形的价格 - > 5652.26
FBB*_*FBB 14
值得注意的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));
Run Code Online (Sandbox Code Playgroud)
这是使用DecimalFormatNick提到的课程的快速示例.
float f = 12.345f;
DecimalFormat df = new DecimalFormat("#.00");
System.out.println(df.format(f));
Run Code Online (Sandbox Code Playgroud)
print语句的输出为12.35.请注意,它将为您舍入它.
有点惊讶没有人指出直接的方法,这很容易。
double roundToDecimalPlaces(double value, int decimalPlaces)
{
double shift = Math.pow(10,decimalPlaces);
return Math.round(value*shift)/shift;
}
Run Code Online (Sandbox Code Playgroud)
很确定这不会做半偶舍入。
就其价值而言,当您将基于二进制的浮点值与基数为 10 的算术混合时,半偶数舍入将变得混乱且不可预测。我很确定这是做不到的。基本问题是像 1.105 这样的值不能用浮点数精确表示。浮点值将类似于 1.105000000000001 或 1.104999999999999。因此,任何执行半偶数舍入的尝试都会因表示编码错误而失败。
IEEE 浮点实现将进行半舍入,但它们进行二进制半舍入,而不是十进制半舍入。所以你可能没事