Java 仅打印带3、2和1小数位的双精度打印,带/和%

Java 仅打印带3、2和1小数位的双精度打印,带/和%,java,number-formatting,Java,Number Formatting,我有一个号码1349.9431。如何仅使用除法(/)和模数(%)运算符打印带3位小数、2位小数和1位小数的数字 每当我尝试除以或使用模时,我都会得到一些疯狂的数字,比如:13499.43099999999好吧,这有点棘手,因为double格式的局限性,但我用它完成了。请注意,它可能不精确 public static void main(String[] args) { double d = 1349.9431; System.out.println(d); d /= 0.

我有一个号码
1349.9431
。如何仅使用除法(
/
)和模数(
%
)运算符打印带3位小数、2位小数和1位小数的数字


每当我尝试除以或使用模时,我都会得到一些疯狂的数字,比如:
13499.43099999999
好吧,这有点棘手,因为
double
格式的局限性,但我用它完成了。请注意,它可能不精确

public static void main(String[] args) {
    double d = 1349.9431;
    System.out.println(d);
    d /= 0.0001;
    System.out.println(d);
    int i = (int)d;
    System.out.println(i);
    i -= i % 100;
    System.out.println(i);
    d = i / 10000d;
    System.out.println(d);
}

仅使用
/
运算符,精确到小数点后3位:

double x = 1349.9431;
x /= 0.001;
long y = (long) y; // downcast to an integer
double z = (double) y / 1000;

System.out.println(threeDecimal);
// 1349.943

DecimalFormat
@AniketSahrawat的要点是“仅使用除法(/)和模(%)运算符”@TobiasWeimer我不明白。你的观点是什么?@TobiasWeimer我认为不值得讨论,我已经读过这个问题了。我仍然建议使用
NumberFormat
DecimalFormat
@AniketSahrawat,所以再看一遍这个问题,他是不允许使用DecimalFormat的。你知道像你这样将double转换为int可能会有奇怪的结果吗?有很多角点需要检查。即使使用
String.format()
,在这里也没有意义。@roundout是的,我知道这一点,并指出“这可能不精确”。这不是我编写代码的方式,但考虑到给定的限制,我看不到其他方法。