/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
/**
* Round half away from zero ('commercial' rounding)
* Uses correction to offset floating-point inaccuracies.
* Works symmetrically for positive and negative numbers.
*/
public static double round(double num, int digits) {
// epsilon correction
double n
= Double.
longBitsToDouble(Double.
doubleToLongBits(num
) + 1); double p
= Math.
pow(10, digits
); return Math.
round(n
* p
) / p
; }
{
// test rounding of half
System.
out.
println(round
(0.5,
0)); // 1 System.
out.
println(round
(-0.5,
0)); // -1
// testing edge cases
System.
out.
println(round
(1.005,
2)); // 1.01 System.
out.
println(round
(2.175,
2)); // 2.18 System.
out.
println(round
(5.015,
2)); // 5.02
System.
out.
println(round
(-1.005,
2)); // -1.01 System.
out.
println(round
(-2.175,
2)); // -2.18 System.
out.
println(round
(-5.015,
2)); // -5.02 }
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KY2xhc3MgSWRlb25lCnsKCS8qKgoJICogUm91bmQgaGFsZiBhd2F5IGZyb20gemVybyAoJ2NvbW1lcmNpYWwnIHJvdW5kaW5nKQoJICogVXNlcyBjb3JyZWN0aW9uIHRvIG9mZnNldCBmbG9hdGluZy1wb2ludCBpbmFjY3VyYWNpZXMuCgkgKiBXb3JrcyBzeW1tZXRyaWNhbGx5IGZvciBwb3NpdGl2ZSBhbmQgbmVnYXRpdmUgbnVtYmVycy4KCSAqLwoJcHVibGljIHN0YXRpYyBkb3VibGUgcm91bmQoZG91YmxlIG51bSwgaW50IGRpZ2l0cykgewoJCgkgICAgLy8gZXBzaWxvbiBjb3JyZWN0aW9uCgkgICAgZG91YmxlIG4gPSBEb3VibGUubG9uZ0JpdHNUb0RvdWJsZShEb3VibGUuZG91YmxlVG9Mb25nQml0cyhudW0pICsgMSk7CgkgICAgZG91YmxlIHAgPSBNYXRoLnBvdygxMCwgZGlnaXRzKTsKCSAgICByZXR1cm4gTWF0aC5yb3VuZChuICogcCkgLyBwOwoJfQoJCglwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgdGhyb3dzIGphdmEubGFuZy5FeGNlcHRpb24KCXsKCQkvLyB0ZXN0IHJvdW5kaW5nIG9mIGhhbGYKCQlTeXN0ZW0ub3V0LnByaW50bG4ocm91bmQoMC41LCAwKSk7ICAgLy8gMQoJCVN5c3RlbS5vdXQucHJpbnRsbihyb3VuZCgtMC41LCAwKSk7ICAvLyAtMQoJCQoJCS8vIHRlc3RpbmcgZWRnZSBjYXNlcwoJCVN5c3RlbS5vdXQucHJpbnRsbihyb3VuZCgxLjAwNSwgMikpOyAgIC8vIDEuMDEKCQlTeXN0ZW0ub3V0LnByaW50bG4ocm91bmQoMi4xNzUsIDIpKTsgICAvLyAyLjE4CgkJU3lzdGVtLm91dC5wcmludGxuKHJvdW5kKDUuMDE1LCAyKSk7ICAgLy8gNS4wMgoKCQlTeXN0ZW0ub3V0LnByaW50bG4ocm91bmQoLTEuMDA1LCAyKSk7ICAvLyAtMS4wMQoJCVN5c3RlbS5vdXQucHJpbnRsbihyb3VuZCgtMi4xNzUsIDIpKTsgIC8vIC0yLjE4CgkJU3lzdGVtLm91dC5wcmludGxuKHJvdW5kKC01LjAxNSwgMikpOyAgLy8gLTUuMDIKCX0KfQo=