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 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
- ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
- ¥16 mybatis的代理对象无法通过@Autowired装填
- ¥15 可见光定位matlab仿真
- ¥15 arduino 四自由度机械臂
- ¥15 wordpress 产品图片 GIF 没法显示
- ¥15 求三国群英传pl国战时间的修改方法
- ¥15 matlab代码代写,需写出详细代码,代价私
- ¥15 ROS系统搭建请教(跨境电商用途)
- ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。