/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
import java.math.BigDecimal;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
/**
* Rounds a double to the specified number of decimal places using the ubiquitous "half up" rounding method
* @param numberToRound The number to be rounded
* @param numberOfDecimals The number of decimals to include in the rounded number
* @return The rounded number
*/
public static double round(double numberToRound, int numberOfDecimals) {
.
setScale(numberOfDecimals,
BigDecimal.
ROUND_HALF_UP) .doubleValue();
}
public static boolean checkDouble(long v) {
double d = (v * 10 + 4) / 10000000.0;
// v * 1,000,000 should be the same as round(d, 6) * 1000,000,000;
double rescale = round(d, 6) * 1000000000.0;
if (v * 1000.0 != rescale) {
System.
out.
printf("Input %d/1000000.0 rounded to %.28f which rescaled to %.18f and not %f\n", v, round
(d,
6), rescale, v
* 1000.0); return false;
}
return true;
}
public static void main
(String[] args
) { for (long i = 0; i < 1000000; i++) {
if (!checkDouble(i)) {
break;
}
}
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CmltcG9ydCBqYXZhLm1hdGguQmlnRGVjaW1hbDsKCi8qIE5hbWUgb2YgdGhlIGNsYXNzIGhhcyB0byBiZSAiTWFpbiIgb25seSBpZiB0aGUgY2xhc3MgaXMgcHVibGljLiAqLwpjbGFzcyBJZGVvbmUKewogICAgLyoqCiAgICAgKiBSb3VuZHMgYSBkb3VibGUgdG8gdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgZGVjaW1hbCBwbGFjZXMgdXNpbmcgdGhlIHViaXF1aXRvdXMgImhhbGYgdXAiIHJvdW5kaW5nIG1ldGhvZAogICAgICogQHBhcmFtIG51bWJlclRvUm91bmQgVGhlIG51bWJlciB0byBiZSByb3VuZGVkCiAgICAgKiBAcGFyYW0gbnVtYmVyT2ZEZWNpbWFscyBUaGUgbnVtYmVyIG9mIGRlY2ltYWxzIHRvIGluY2x1ZGUgaW4gdGhlIHJvdW5kZWQgbnVtYmVyCiAgICAgKiBAcmV0dXJuIFRoZSByb3VuZGVkIG51bWJlcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGRvdWJsZSByb3VuZChkb3VibGUgbnVtYmVyVG9Sb3VuZCwgaW50IG51bWJlck9mRGVjaW1hbHMpIHsKCiAgICAgICAgcmV0dXJuIG5ldyBCaWdEZWNpbWFsKG51bWJlclRvUm91bmQpCiAgICAgICAgICAgICAgICAgICAgLnNldFNjYWxlKG51bWJlck9mRGVjaW1hbHMsIEJpZ0RlY2ltYWwuUk9VTkRfSEFMRl9VUCkKICAgICAgICAgICAgICAgICAgICAuZG91YmxlVmFsdWUoKTsKICAgIH0KICAgIAogICAgCiAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gY2hlY2tEb3VibGUobG9uZyB2KSB7CiAgICAJZG91YmxlIGQgPSAodiAqIDEwICsgNCkgLyAxMDAwMDAwMC4wOwogICAgCS8vIHYgKiAxLDAwMCwwMDAgc2hvdWxkIGJlIHRoZSBzYW1lIGFzIHJvdW5kKGQsIDYpICogMTAwMCwwMDAsMDAwOwogICAgCWRvdWJsZSByZXNjYWxlID0gcm91bmQoZCwgNikgKiAxMDAwMDAwMDAwLjA7CiAgICAJaWYgKHYgKiAxMDAwLjAgIT0gcmVzY2FsZSkgewogICAgCQlTeXN0ZW0ub3V0LnByaW50ZigiSW5wdXQgJWQvMTAwMDAwMC4wIHJvdW5kZWQgdG8gJS4yOGYgd2hpY2ggcmVzY2FsZWQgdG8gJS4xOGYgYW5kIG5vdCAlZlxuIiwgdiwgcm91bmQoZCw2KSwgcmVzY2FsZSwgdiAqIDEwMDAuMCk7CiAgICAJCXJldHVybiBmYWxzZTsKICAgIAl9CiAgICAJcmV0dXJuIHRydWU7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgIGZvciAobG9uZyBpID0gMDsgaSA8IDEwMDAwMDA7IGkrKykgewogICAgICAgIAlpZiAoIWNoZWNrRG91YmxlKGkpKSB7CiAgICAgICAgCQlicmVhazsKICAgICAgICAJfQogICAgICAgIAkKICAgICAgICB9Cgl9CiAKIH0=