当前位置: 首页 > 知识库问答 >
问题:

我的代码真的有可能不记录值小于1的十进制数吗?[重复]

狄承望
2023-03-14

美好的一天!

大家好,说到编码,我是个初学者。

我使用Apache NetBeans IDE 12.6

这里给出了一个例子,其中Fout=9,而Fin=29。当Fout除以Fin时,其答案显示为MA=0.0,但与计算器相比,答案应为0.3103448276。

所以我想问一下,这是否只是编码中发生的正常事情,或者我需要添加其他代码来获得一个可以与计算器的答案相比较的结果。

以下是代码:

package samplecode;

import java.util.Scanner;

public class Samplecode {
  
    public static void main(String[] args) {      
        Scanner sc = new Scanner(System.in);       
        System.out.println("The Formula is MA = Fout/Fin"); 
        System.out.println("Enter the values of Fout: ");
        int Fout = sc.nextInt();
        System.out.println("Enter the values of Fin: ");
        int Fin = sc.nextInt();
        System.out.println("Fout: " + Fout);
        System.out.println("Fin: " + Fin);
        double formula = (Fout / Fin);
        System.out.println("MA =  " + formula);    
    }    
}

共有3个答案

窦伟
2023-03-14

将一个整数(byte,短,int,long)与另一个整数(byte,短,int,long)相比较,总是会得到一个整数;其余的将被丢弃。将结果转换为双精度并不会使除法成为双精度计算。

如果将任意一个操作数强制转换为双倍,则会起作用:(double)Fout/FinFout/(double)Fin。将其中一个变量声明为double也会起作用。

顾恺
2023-03-14

你在除以(int)9/(int)29。因此,结果也将是一个整数。

9/29以下的下一个整数是0。

修正:用双除法代替整数除法:

double formula = (double) Fout / Fin;
翟承志
2023-03-14

使用double公式=((double)Fout/(double)Fin)

当我们“展开”double公式=(Fout/Fin) ,它实际上是:

int temp = Fout / Fin; // Here temp is 0
double formula = (double)temp; // So it's (double)0 -> 0.0

(在a/b中,/是否返回int或任何其他类型取决于ab的类型。所以这里的公式类型不算数。)

double公式=((double)Fout/(double)Fin) 将是:

double d_fout = (double)Fout;
double d_fin = (double)Fin;
double formula = d_fout / d_fin;

因为会有一个隐式转换,所以使用double formula=(double)Fout/Fin也是一样的 双公式=Fout/(双)鳍 如@RobSpoor所评论。

 类似资料:
  • 我需要一个带有2个小数的5位数整数的regex。 null null

  • 我可以运行这个程序,但由于某些原因,它会显示/放置随机字符,而不是二进制的初始值,而且我似乎无法将程序从十进制运行回二进制。我该如何改进这些代码。要明确说明它不会将二进制转换为十进制,我将如何将其转换回十进制转换为二进制,如果有一些代码可以帮助我,将不胜感激。

  • 在我的代码中 当我运行程序时,它抛出一个数字格式异常 我做错了什么?这似乎相对简单,但不起作用。

  • 问题内容: 我想将单元格的前景色设置为十六进制代码中的给定颜色。例如,当我尝试将其设置为红色时: 无论我在解码函数的参数中设置了什么十六进制值,getIndexed函数都将始终返回黑色。 可能是我做错了什么吗?我认为这是一个错误,但我不确定… 问题答案: 好消息是,如果您使用的是XSSF,而不是HSSF,那么解决问题的方法就很简单。您只需将样式变量转换为XSSFCellStyle。如果这样做,则存

  • 我一直看到有人声称MOV指令可以在x86中免费,因为寄存器重命名。 对我来说,我无法在一个测试用例中验证这一点。我尝试的每个测试用例都会揭穿它。 例如,这是我正在使用Visual C编译的代码: 这将为循环生成以下汇编代码(可以随意生成;显然不需要Visual C): 现在,我多次运行该程序,在删除MOV指令时,我观察到相当一致的2%差异: 那是什么呢?为什么电影不是“免费的”?这个循环对于x86

  • 需要以这种形式解决 没有使用的最后一个字符