java-8 - Java 浮点值四舍五入
问题描述
我尝试了一个简单的 java 程序来四舍五入 Float 值
float value = 0.525f;
System.out.println(Math.round(value * 100.0d) / 100.0f)
获得输出是 -0.52
但预期是 -0.53
当我调试浮点value
变量的值时,它向我展示了类似的0.5249999761581421
东西。我认为仅因为这个原因,它没有正确舍入。
如果有人知道如何将浮点值四舍五入到小数点后两位,请帮助我。
解决方案
转换0.525f
为 a double
(在您的计算中隐含地发生)时,0.5249999761581421
是最接近的 double 表示。然后这个数字将被四舍五入。
另一个问题是你的表达式总是四舍五入(因为你只是去掉了除前两位小数之外的所有位)。
Java 内置了对BigDecimal
类中舍入数字的支持。
要对这样的数字进行四舍五入,请使用:
String s = String.valueOf(0.525f); // results in "0.525"
BigDecimal rounded = new BigDecimal(s).setScale(2, RoundingMode.HALF_UP);
System.out.println(rounded);
这导致0.53
.
另请注意,舍入数字的不同方式(请参阅 Javadoc 的RoundingMode)。
推荐阅读
- java - 尝试与 SSLSocket 握手时出现 java.lang.NullPointerException
- java - 获取复选框pdfbox的导出值
- python - Vscode atom 深色主题不突出显示 tkinter
- google-sheets - 将动态数据与谷歌表格中的输入连接起来
- go - Go GRPC 中的授权注解
- boost - 我不知道为什么 boostrap.bat 不执行
- javascript - 在上传之前预览许多图像
- sql - 将列分隔字段更改为在同一列 SQL 中输入
- excel - 使用 Google 表格编辑 XLSM 文件(不将文件转换为 GS)
- angular - Angular - 如果输入为空,则禁用按钮不起作用