Java将double转换为int

时间:2015-09-25 08:58:20

标签: java

我有这个代码,文本字段中的输入是50,所以它的输出应该是25,
但是有一个错误,因为没有输出

button_1.addActionListener(new ActionListener() {
    String tfg = textField.getText().toString();
    String tfc = textField.getText();

    public void actionPerformed(ActionEvent e) {
        if(textField.getText().toString().equals("0") || 
            textField.getText().toString().equals("") || 
            textField.getText().toString().equals(" ") || 
            textField.getText().toString().matches("[a-zA-Z]+")) {
            JOptionPane.showMessageDialog(Cow.this,
                            "Tree Amount Should Be 1 or More",
                            "Invalid Tree Amount",
                            JOptionPane.ERROR_MESSAGE);
        }

        if(!tfg.equals("0")) {
            try {
                int tfgg = Integer.parseInt(tfc);
                int trcs = tfgg * 1;
                double trcp = 1 / 2;
                int trcc = (int) trcp * trcs;
                System.out.println(new Integer(trcc).toString());
            } catch (NumberFormatException se) {

            }
        }
    }
});

我尝试从我的php转换为该代码,这是我的PHP代码:

$doorSeed = $mount * 1;
$doorPrice = 1 / 2;
$doorConvert = $doorPrice * $doorSeed;
echo "Treasure Chest Seed = ".$doorSeed." Price : ".$doorConvert." World Lock <br>";

3 个答案:

答案 0 :(得分:2)

int trcc = (int) trcp * trcs;

试试这个

int trcc = (int) (trcp * trcs);

您需要将complete expression [(trcp * trcs)]而不仅仅是第一个变量trcp投射到int。表达式trcs中的另一个变量属于double类型,因此表达式的结果变为double。这就是你施放完整表达式的原因。因此,您的最终结果将为int

     int tfgg = Integer.parseInt(tfc.trim());    // tfc = 4;   tfgg = 4;
     int trcs = tfgg * 1;                 // trcs = 4 * 1 = 5;
     double trcp = 1.0 / 2;               // trcp = 0.5;
     int trcc = (int) (trcp * trcs);      // trcc = (0.5 * 5) = (2.5) = 2;
     System.out.println(trcc);            // 2;

double trcp = 1.0 / 2;

此处至少将一个值设为double,因此表达式将按照@tunaki的建议评估为double

此外,您在代码int trcs = tfgg * 1;中不需要此语句。

像这样使用:

  String tfg ;
  String tfc ;
  public void actionPerformed(ActionEvent e) {
    tfg = textField.getText();
    tfc = textField.getText();
    if(textField.getText().equals("0") || textField.getText().equals("") || textField.getText().equals(" ") || textField.getText().matches("[a-zA-Z]+")) {
      JOptionPane.showMessageDialog(Cow.this,
          "Tree Amount Should Be 1 or More",
          "Invalid Tree Amount",
          JOptionPane.ERROR_MESSAGE);
    }
    if(!tfg.equals("0")) {
      try {
        int tfgg = Integer.parseInt(tfc.trim());    // tfc = 4;
        int trcs = tfgg;                 // trcs = 4 * 1 = 5
        double trcp = 1.0 / 2;                 // trcp = 0.5
        int trcc = (int) (trcp * trcs);      // trcc = (0.5 * 5) = (2.5) = 2
        System.out.println("HI: "+trcc);
      } catch (NumberFormatException ignored) {
      }

答案 1 :(得分:1)

你的问题就在这一行:

trcp = 0.5

导致trcp = 0.0double trcp = 1.0 / 2; ,因为您要划分整数值(因此使用整数除法)。

您应该使用以下代码:

new Integer(trcc).toString()

使用双打强制分裂。

其他评论:

  • String.valueOf(trcc)应替换为int trcs = tfgg * 1;
  • 避免使用空的catch语句:至少记录异常
  • 这一行有什么意义:rake routes

答案 2 :(得分:0)

基本上你有这个(int)0.5 = 0。 在你的情况下,trcp = 0.5并且是双倍的,所以当它被转换为整数时,结果为0。

当你执行(int)a + b时,优先使用括号的真实操作是:((int)a)+(b),所以你需要的是以下内容:

int trcc = (int) (trcp * trcs);

而不是以下内容:

int trcc = (int) trcp * trcs;