当前位置: 首页 > 面试题库 >

Java-四舍五入到小数点后两位

叶书
2023-03-14
问题内容

如果值为200.3456,则应将其格式化为200.34。如果是200,那么应该是200.00


问题答案:

这是一个实用程序,可以将双精度舍入(而不是截断)双精度至小数位数。

例如:

round(200.3456, 2); // returns 200.35

原始版本;提防这个

public static double round(double value, int places) {
    if (places < 0) throw new IllegalArgumentException();

    long factor = (long) Math.pow(10, places);
    value = value * factor;
    long tmp = Math.round(value);
    return (double) tmp / factor;
}

这在小数位数很高(例如)或整数部分很大(例如)的极端情况下会严重崩溃。感谢Sloin指出这一点。round(1000.0d, 17)round(90080070060.1d, 9)

多年来,我一直在使用上面的方法将“不太大”的双精度取整到2或3个小数位(例如,以秒为单位的清理时间用于记录目的:27.987654321987-> 27.99)。但是我想最好避免使用它,因为更可靠的方法已经可以使用,并且代码也更简洁。

因此,改用它
(改编自Louis Wasserman的回答和Sean Owen的回答。)

public static double round(double value, int places) {
    if (places < 0) throw new IllegalArgumentException();

    BigDecimal bd = BigDecimal.valueOf(value);
    bd = bd.setScale(places, RoundingMode.HALF_UP);
    return bd.doubleValue();
}

注意,这HALF_UP是“学校常用”的舍入模式。细读的RoundingMode文件,如果你怀疑你需要别的东西,如银行家舍入。

当然,如果你愿意,可以将以上内容内联为单行:

new BigDecimal(value).setScale(places, RoundingMode.HALF_UP).doubleValue()

而且在每种情况下

永远记住,浮点表示使用float和double是不精确的。例如,考虑以下表达式:

999199.1231231235 == 999199.1231231236 // true
1.03 - 0.41 // 0.6200000000000001

为了精确起见,你想使用BigDecimal。同时,使用带String的构造函数,而不要带double的构造函数。例如,尝试执行以下命令:

System.out.println(new BigDecimal(1.03).subtract(new BigDecimal(0.41)));
System.out.println(new BigDecimal("1.03").subtract(new BigDecimal("0.41")));

关于该主题的一些出色的进一步阅读:

  • 项目48:Joshua Bloch撰写的Effective Java(第二版)中的“避免float并且double如果需要确切的答案”
  • 每个程序员应了解的浮点运算法则
    如果你希望使用字符串格式而不是(或除了)严格舍入数字,请参阅其他答案。

具体来说,请注意round(200, 0)return 200.0。如果要输出“ 200.00 ”,则应首先取整,然后格式化输出的结果(这在Jesper的答案中有很好的解释)。



 类似资料:
  • 我如何四舍五入到两个小数位?

  • 获取以下数字集--> 当相加时,这些给出一个整数。

  • 我需要把分钟换算成小时,四舍五入到小数点后两位。我还需要在小数点后显示最多两个数字。所以如果我有650分钟,那么小时应该是10.83。 但在这种情况下,如果我的分钟数是630小时,那就是10.5000000。但我只想要10.50(四舍五入后)。我如何做到这一点?

  • 我正在尝试用Java对BigDecimal进行四舍五入。下面是我执行的代码 因此,对于我的使用情形,输出为prec1 = 49.32和prec2 = 49.33,我需要始终舍入到49.33,那么除了设置两次比例之外,还有其他舍入到49.33的方法吗?

  • 问题内容: 我有以下JavaScript语法: 这四舍五入为整数。如何返回两位小数的结果? 问题答案: 注-如果3位数精度很重要,请参阅编辑4 toFixed将根据超过2个小数的值为您舍入或舍入。 编辑 -正如其他人所提到的,它将结果转换为字符串。为了避免这种情况: 编辑2- 正如注释中所提到的,此函数在某种程度上会失败,例如在1.005的情况下,它将返回1.00而不是1.01。如果准确性在这个程

  • 我对java相当陌生,我必须创建这个程序,我不知道从哪里开始。有人能帮我做什么,以及如何写代码开始吗? 编写一个模拟收银机的程序。提示用户输入三件商品的价格。将它们相加以获得小计。确定小计的税额(6%)。查找销售小计加税额的总额。显示每件商品的价格、小计金额、税额和最终金额。 到目前为止,我有这个: 输出(如果价格为price1=1.65,price2=2.82和price3=9.08美元)如下所