当前位置: 首页 > 知识库问答 >
问题:

四舍五入到小数点后2位

田仲卿
2023-03-14

获取以下数字集-->

[5.1429,5.1429,5.1429,5.1429,5.1429,5.1429,5.1426]
[0.8333,0.8333,0.8333,0.8333,0.8333,0.8335]

当相加时,这些给出一个整数。

[5.14, 5.14, 5.14, 5.14, 5.14, 5.14, 5.14]
[0.83, 0.83, 0.83, 0.833, 0.83, 0.83]

共有1个答案

汪德寿
2023-03-14

如果通过递减第三个小数并向下四舍五入对输入进行排序,除了达到目标的足够数量之外,将引入最小的绝对四舍五入误差--同时保持总数不变。

举个简单的例子:

输入

0.132, 0.226, 0.257, 0.385 // sums up to 1.00
0.257, 0.226, 0.385, 0.132
0.25, 0.22, 0.38, 0.13 // sums up to 0.98
0.26, 0.23, 0.38, 0.13 // sums up to 1.00
public void printRounded(double[] ds) {
    // create wrapper objects
    int n = ds.length;
    Wrapper[] ws = new Wrapper[n];
    for (int i = 0; i < n; i++)
        ws[i] = new Wrapper(i, (int)(ds[i] * 1000) % 10, (int)(ds[i] * 100));

    // sort by third decimal, descending
    Arrays.sort(ws, new Comparator<Wrapper>() {
        public int compare(Wrapper o1, Wrapper o2) {
            return o2.thirdDecimal.compareTo(o1.thirdDecimal);
        }
    });

    // find number of elements that must be rounded up and increment
    int sum = 0;
    for (int i = 0; i < n; i++)
        sum += ws[i].prefix;
    int numberToIncrement = 100 - (sum % 100);
    for (int i = 0; i < numberToIncrement ; i++)
        ws[i].prefix++;

    // sort back to input order
    Arrays.sort(ws, new Comparator<Wrapper>() {
        public int compare(Wrapper o1, Wrapper o2) {
            return o1.index.compareTo(o2.index);
        }
    });

    // print values
    for (int i = 0; i < n; i++) {
        System.out.println(ws[i].prefix / 100 + "." ws[i].prefix % 100);
    }
}

private class Wrapper {
    public Wrapper(int index, int thirdDecimal, int prefix) {
        this.index = index;
        this.thirdDecimal = thirdDecimal;
        this.prefix = prefix;
    }

    public int index;
    public int thirdDecimal;
    public int prefix;
}

当然,您可以将ints转换回double并使用标准格式,而不是使用自定义格式。

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

  • 问题内容: 如果值为,则应将其格式化为。如果是,那么应该是。 问题答案: 这是一个实用程序,可以将双精度舍入(而不是截断)双精度至小数位数。 例如: 原始版本;提防这个 这在小数位数很高(例如)或整数部分很大(例如)的极端情况下会严重崩溃。感谢Sloin指出这一点。 多年来,我一直在使用上面的方法将“不太大”的双精度取整到2或3个小数位(例如,以秒为单位的清理时间用于记录目的:27.9876543

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

  • 我已经阅读了很多stackoverflow问题,但似乎没有一个对我有效。我正在使用<code>数学。round()进行舍入。这是代码: 我得到的输出是:< code>123,但我希望它是< code>123.14。我知道添加< code>*100/100会有所帮助,但是正如你所看到的,我并没有设法让它工作。 输入和输出都是双份绝对是必不可少的。 如果您更改上述代码的第4行并发布它,那将是很大的帮助

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

  • 我想把一个数字四舍五入到小数点后2位,但也保留后面的2个零,例如425.1382到425.1400,我在下面的例子中尝试过,但它似乎不起作用 或