Android - 如何自定义舍入值?

时间:2013-11-15 16:53:42

标签: java android rounding

我非常擅长四舍五入。我正试图将价值四舍五入到我国货币的四舍五入。

舍入示例将是:

1.01 > 1.00
1.02 > 1.00
1.03 > 1.05
1.04 > 1.05
1.06 > 1.05
1.07 > 1.05
1.08 > 1.10
1.09 > 1.10
我怎么能做这种舍入?非常感谢。

6 个答案:

答案 0 :(得分:2)

看起来你正在以0.05 = 1/20的方式进行四舍五入。以下是有效的:

public static double roundCurrency( double value ) {
    return Math.round(value * 20.0 ) / 20.0;
}

答案 1 :(得分:0)

double roundedvalue= Math.round( YourValue* 100.0 ) / 100.0;

答案 2 :(得分:0)

double roundedvalue= Math.round( YourValue* 2.0 ) / 2.0;

答案 3 :(得分:0)

这似乎给你正确的映射 - 你可能需要在确定截止点的确切位置时调整它。

public void test() {
  double [] tests = new double[] {1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9};
  for ( double d : tests) {
    System.out.println("    "+d + " -> "+round(d, .05, 0.5));
  }
}

double round(double d, double fraction, double bias) {
  return Math.floor(d / fraction + bias) * fraction;
}

打印:

1.01 -> 1.0
1.02 -> 1.0
1.03 -> 1.05
1.04 -> 1.05
1.05 -> 1.05
1.06 -> 1.05
1.07 -> 1.05
1.08 -> 1.1
1.09 -> 1.1

答案 4 :(得分:0)

Math.round可以将数字舍入到最接近的整数。看起来你正在尝试舍入到最接近的0.5的倍数。解决这类问题的一般方法是

roundedValue = Math.round (X / M) * M;

舍入到M的最接近倍数。所以在你的情况下将是

roundedValue = Math.round (X / 0.5) * 0.5;

相同
roundedValue = Math.round (X * 2.0) / 2.0;

同样地,如果你想要将某些东西舍入到最接近的倍数,比如0.01,那么其中一个会起作用:

roundedValue = Math.round (X / 0.01) * 0.01;
roundedValue = Math.round (X * 100.0) / 100.0;

编辑:看起来你已经改变了你的问题,所以我之前说的关于舍入到最接近的0.5的倍数是不正确的,现在你正在四舍五入到最接近0.05的倍数。无论如何,我讨论的一般方法仍然有效。

答案 5 :(得分:0)

查看关于Math Class的http://docs.oracle.com/javase/6/docs/api/java/lang/Math.html文档。它允许您执行Math.round(double x)Math.ceil(double x)等操作 Math.floor(double x)double value = 1.6; String valueToString = Double.toString(value); String [] numbers = valueToString.split("."); String decimalNums = numbers[1]; int decimal = Integer.parseInt(decimalNums); if(decimal > 0 && decimal < 5){ decimal = Math.floor(decimal); }else if(decimal >= 5 && decimal < 8){ decimal = 5; }else{ decimal = Math.ceil(decimal); } 。您可以将这些与if else语句结合使用,例如

{{1}}

这仅适用于具有一个小数位的值。但它是一个开始。希望它有所帮助。