程序yang 2022-09-21 16:52 采纳率: 54.5%
浏览 36
已结题

使用Java的DecimalFormat问题

问题遇到的现象和发生背景

使用DecimalFormat保留一位小数,看了DecimalFormat的介绍:1.25 保留一位小数就是 1.2 ; 1.35 保留一位小数就是 1.4 因为满足银行家算法:四舍六入五考虑,五后非零就进一,五后为零看奇偶,五前为偶应舍去,五前为奇要进一,(即最后一位小数是 5 的时候,当前一位是奇数的时候就进一位凑成偶数,当前一位是偶数的时候就舍去),怎么4.45和4.55效果就和前面的不一样呢?是中间有什么问题吗?还是使用不当?

用代码块功能插入代码,请勿粘贴截图
double num2 = 1.25;
System.out.println(new DecimalFormat("#.#").format(num2));//1.2

double num3 = 1.35;
System.out.println(new DecimalFormat("#.#").format(num3));//1.4

double num4 = 4.45;
System.out.println(new DecimalFormat("#.#").format(num4));//为啥是4.5?不应该和前面的一样是4.4double num5 = 4.55;
System.out.println(new DecimalFormat("#.#").format(num5));//为啥是4.5?不应该和前面的一样是4.6

输出结果:
1.2
1.4
4.5
4.5

  • 写回答

3条回答 默认 最新

  • 燕少༒江湖 2022-09-21 17:10
    关注

    因为num4是浮点型,对呀BigDecimal数据,建议用字符串

    public static void main(String[] args) {
            String num2 = "1.25";
            System.out.println(new DecimalFormat("#.#").format(new BigDecimal(num2)));//1.2
    
            String num3 = "1.35";
            System.out.println(new DecimalFormat("#.#").format(new BigDecimal(num3)));//1.4
    
            String num4 = "4.45";
            System.out.println(new DecimalFormat("#.#").format(new BigDecimal(num4)));//为啥是4.5?不应该和前面的一样是4.4?
    
            String num5 = "4.55";
            System.out.println(new DecimalFormat("#.#").format(new BigDecimal(num5)));//为啥是4.5?不应该和前面的一样是4.6?
        }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 9月29日
  • 已采纳回答 9月21日
  • 修改了问题 9月21日
  • 创建了问题 9月21日

悬赏问题

  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么