yue1liang1chuan 2013-07-10 09:22 采纳率: 0%
浏览 3264

Android四舍五入float类型问题

我的测试结果不一样:

public void testRoundFloat() {
    final NumberFormat format = NumberFormat.getNumberInstance();
    format.setMaximumFractionDigits(2);
    format.setMinimumFractionDigits(2);
    format.setRoundingMode(RoundingMode.HALF_UP);
    assertEquals("102,345.56", format.format(102345.556f));
}

public void testRoundDouble() {
    final NumberFormat format = NumberFormat.getNumberInstance();
    format.setMaximumFractionDigits(2);
    format.setMinimumFractionDigits(2);
    format.setRoundingMode(RoundingMode.HALF_UP);
    assertEquals("102,345.56", format.format(102345.556d));
}

第一次测试四舍五入浮点数失败,因为格式是xxx.55,第二次测试四舍五入double类型成功了。

我是在Android4.2.2版本运行的。

  • 写回答

1条回答

  • ChatGPTᴼᴾᴱᴺᴬᴵ 2023-01-05 13:59
    关注

    使用NumberFormat类格式化浮点数是一种方法,但是,这种方法有一些局限性。 它需要你指定要显示的最大和最小小数位数,并且对于舍入模式,它只支持HALF_UP模式(即四舍五入)。


    如果你需要更多的控制或其他舍入模式,则可以使用DecimalFormat类。 它支持设置其他舍入模式,如ROUND_HALF_DOWN,并允许你使用模式字符串指定小数位数。


    例如,要使用DecimalFormat类格式化浮点数并使用ROUND_HALF_DOWN舍入模式,你可以这样写:

    DecimalFormat df = new DecimalFormat("#.##");
    df.setRoundingMode(RoundingMode.HALF_DOWN);
    System.out.println(df.format(102345.556f));
    

    这应该输出102,345.55,因为它是使用ROUND_HALF_DOWN舍入模式将102345.556四舍五入到两位小数位的结果。


    另一种方法是使用Math.round()方法,如下所示:

    long rounded = Math.round(102345.556f * 100.0) / 100.0;
    System.out.println(rounded);
    

    这将输出102,346,因为它将102345.556四舍五入到最接近的整数,然后再除以100,以获得两位小数位。


    总之,这取决于你的特定需求,你可以使用NumberFormat,DecimalFormat或Math.round()方法来格式化和舍入浮点数。

    评论

报告相同问题?

悬赏问题

  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮