public static void main (String[] args)
{
DecimalFormat fmt=new DecimalFormat(“0.#”);
double a=3.25,b=3.75;
System.out.println(fmt.format(a));
System.out.println(fmt.format(b));
}
为什么打印结果是3.2和3.8?
DecimalFormat的取舍原则是什么?
关于DecimalFormat的一系列的取舍原则
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- 王胖胖_ 2021-11-15 15:56关注
DecimalFormat 默认使用的是进位方式是HALF_EVEN,有点坑,规律就是看进舍位的前一位是奇数还是偶数
奇数:四舍五入
偶数:五舍六入
如3.25 保存一位小数,进舍位前一位是2,2是偶数,五舍六入 结果就是3.2,如果是3.26 结果就是3.3
再如3.75 保存一位小数 进舍位前一位是7,7是奇数,四舍五入 结果就是3.8如果想实现四舍五入,增加下面代码,切换进位方式
fmt.setRoundingMode(RoundingMode.HALF_UP);public static void main(String[] args) { DecimalFormat fmt=new DecimalFormat("0.#"); fmt.setRoundingMode(RoundingMode.HALF_UP); double a=3.25,b=3.75; System.out.println(fmt.format(a)); System.out.println(fmt.format(b)); }
ps:format方法直接传double类型会有各种想不到的坑,建议这样使用 :
fmt.format(BigDecimal.valueOf(a)) 或 fmt.format(new BigDecimal(a))本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用
悬赏问题
- ¥15 centos7.9 IPv6端口telnet和端口监控问题
- ¥120 计算机网络的新校区组网设计
- ¥20 完全没有学习过GAN,看了CSDN的一篇文章,里面有代码但是完全不知道如何操作
- ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
- ¥20 海浪数据 南海地区海况数据,波浪数据
- ¥20 软件测试决策法疑问求解答
- ¥15 win11 23H2删除推荐的项目,支持注册表等
- ¥15 matlab 用yalmip搭建模型,cplex求解,线性化处理的方法
- ¥15 qt6.6.3 基于百度云的语音识别 不会改
- ¥15 关于#目标检测#的问题:大概就是类似后台自动检测某下架商品的库存,在他监测到该商品上架并且可以购买的瞬间点击立即购买下单