在划分 (6.022/6.022=1000) Java 时得到 1000 作为答案而不是 1

Posted

技术标签:

【中文标题】在划分 (6.022/6.022=1000) Java 时得到 1000 作为答案而不是 1【英文标题】:Getting 1000 as an answer instead of 1 when dividing (6.022/6.022=1000) Java 【发布时间】:2014-02-22 10:21:31 【问题描述】:

所以,我是编程新手,我试图制作一个基本的摩尔(化学)计算器只是为了好玩。我没有找到这个问题。如果有答案,请将链接发给我。

这是公式:n = N / Na 其中n = moleNa = 6.022E23

代码的第一部分引发错误。只是想得到一个,将 Na 除以我给定的 N,即使使用 6.022 而不是 6.022E23,我也会得到 1000.0 作为答案。

Scanner in = new Scanner(System.in);
double Na = 6.022;

System.out.print("What do you want to know? Mol(0) or N(1)? ");
int first = in.nextInt();
if (first == 0)
    System.out.print("Insert N: ");
    double N = in.nextDouble();
    double mol = N/Na;
    System.out.print("There are " + mol + " mol in that sample.");

else if (first == 1)
    System.out.print("Insert mol: ");
    double mol = in.nextDouble();
    double N = mol*Na;
    System.out.print("There are " + N + " molecules, atoms or ions in that sample.");   

输出 0:

What do you want to know? Mol(0) or N(1)? 0  
Insert N: 6.022  
There are 1000.0 mol in that sample.  

输出1:

What do you want to know? Mol(0) or N(1)? 1  
Insert mol: 1  
There are 6.022 molecules, atoms or ions in that sample.  

提前致谢。

【问题讨论】:

看起来像Locale 问题。你用的是什么Locale @Keppil 这就是我所期望的。在美国系统中,点被解释为千位的分隔符,而不是小数点。 @Keppil 我不知道。新手,没听过这个词。我想我现在明白你的意思了。不,这不是问题。我可以使用点和逗号,都一样。但 1000 在任何地方都不是 1。 ***.com/questions/5929120/nextdouble-doesnt-allow @Heuster:“在美国系统中,点被解释为千位的分隔符,而不是小数点。”不,不是,至少不是在美国。 . 是小数分隔符,, 是千位分隔符。我不知道他们在中美洲或南美洲做什么。 【参考方案1】:

由于您正在编写一个小代码,因此我可以对新编码员提出的简单建议是硬编码,因此它是:

double mol = N/6.022;

这会给你你想要的。该错误是因为它将其视为 6022 而不是 6.022,因为它正在识别 .作为千位指标。希望这会有所帮助。

如果您不想硬编码该值,请添加:

in.useLocale(Locale.US);

就在您声明扫描仪的下方。这两种解决方案都应该可以解决您的问题。

【讨论】:

使用 Bumptious Q Bangwhistle 链接,并添加 in.useLocale(Locale.US);解决了这个问题。不过,我想保留 Na 以供将来参考。谢谢你的时间。确实。该编辑正在回答所有问题!

以上是关于在划分 (6.022/6.022=1000) Java 时得到 1000 作为答案而不是 1的主要内容,如果未能解决你的问题,请参考以下文章

json JSON中按地理坐标划分的1000个美国最大城市

有关计数问题的DP 划分数

制定划分的一般规则

THREE.js:将网格划分为零件

生产安全事故等级划分

生产安全事故等级划分