双精度

时间:2015-10-04 00:47:53

标签: java double

我需要一些帮助,这是我所指的代码:

int myId; 
my Id = 20113275l
int numLet; 
numLet = 6;
double doubleResult; 
doubleResult = 10000 + (80 + ((myId - 123456) / ((numLet + 20)*(numLet + 20))      )); 
System.out.println("Expression 5: " + doubleResult); 

根据我的计算器,答案应该是39650.7,但是当我运行该程序时,它给了我39650.0

有谁可以解释这里发生了什么?

2 个答案:

答案 0 :(得分:0)

在这种情况下,您应该仅使用double值来获得想要的结果:

int myId; 
myId = 20113275;
int numLet; 

变为

double myId = 20113275.0;
double numLet;

这是输出:

Expression 5: 39650.73816568047

答案 1 :(得分:0)

您正在进行整数除法,因为您的参数都不是double。除以两个整数的结果是整数。您的类型为int(在最后添加l促销long)。无论如何,将其中一个术语投射到double,您将得到您期望的结果。对于一个十进制精度,您可以使用格式化输出。像,

public static void main(String[] args) {
    int myId = 20113275; // <--- Not a long.
    int numLet = 6;
    double doubleResult = 10000 + //
        (80 + ((myId - 123456) / (double) ((numLet + 20) * (numLet + 20))));
    System.out.printf("Expression 5: %.1f%n", doubleResult);
}

输出(按照您的要求)

Expression 5: 39650.7