我正在使用Java 7
我正在尝试将两个双精度相乘并将它们转换为整数,如下所示:
double xp = value*multiplier; // These are both doubles
int exp = (int) xp; // I suspect the problem is here
System.out.println("output: "+exp);
当前值为14且乘数为50,但是系统打印出来.21。Java思维14 * 50是21还是导致此转换的双重转换。
我试过把它们放在一起像这样:
int xp = (int) (value*multiplier);
然而,这会产生相同的21输出。
我之前尝试过将一个double转换为int并且它完美无缺。我已经尝试过这种方法,这是我首先向你展示的,它可以在其他地方使用,但不是在这里。
再次:值= 14,乘数= 50
为什么输出会产生,如何修复它以产生正确的数学输出。
注意:您可能会注意到这些数字都没有小数点,使其成为双倍。这些数字可以是小数,具体取决于用户输入。
更多代码:
double multiplier = 1.0;
if(p.getInventory().getItemInHand().hasItemMeta())
{
if(p.getInventory().getItemInHand().getItemMeta().hasLore())
{
if(p.getInventory().getItemInHand().getItemMeta().getLore().contains("§7BlockExperience I"))
{
multiplier = main.getConfig().getDouble("expenchlevel1");
}
if(p.getInventory().getItemInHand().getItemMeta().getLore().contains("§7BlockExperience II"))
{
multiplier = main.getConfig().getDouble("expenchlevel2");
}
if(p.getInventory().getItemInHand().getItemMeta().getLore().contains("§7BlockExperience III"))
{
multiplier = main.getConfig().getDouble("expenchlevel3");
}
if(p.getInventory().getItemInHand().getItemMeta().getLore().contains("§7BlockExperience IV"))
{
multiplier = main.getConfig().getDouble("expenchlevel4");
}
if(p.getInventory().getItemInHand().getItemMeta().getLore().contains("§7BlockExperience V"))
{
multiplier = main.getConfig().getDouble("expenchlevel5");
}
}
}
和变量值
int value = main.getConfig().getInt("blockexperience."+key);
这条路径没有错误,我把50放在那里
当打印出两个值时,我的预期值为:14乘数:50.0
答案 0 :(得分:2)
我怀疑您误解了value
和multiplier
的值,或者您的方法存在问题;例如你是如何编译和运行代码的。
Java思维14 * 50是21还是导致这种情况的双重转换。
基本上,你的初始代码适用于我(Java 8)....这里是我的LXTerminal会话剪切和粘贴的证据。
[steve@newbox tmp]$ javac Exp.java
[steve@newbox tmp]$ java Exp
output: 700
[steve@newbox tmp]$ cat Exp.java
public class Exp {
public static void main(String[] args) {
double value = 14;
double multiplier = 50;
double xp = value*multiplier; // These are both doubles
int exp = (int) xp; // I suspect the problem is here
System.out.println("output: "+exp);
}
}
[steve@newbox tmp]$ java -version
openjdk version "1.8.0_45"
OpenJDK Runtime Environment (build 1.8.0_45-b14)
OpenJDK 64-Bit Server VM (build 25.45-b02, mixed mode)
[steve@newbox tmp]$
更新 - 查看您发布的其他代码片段(目前为止),我仍然没有看到令人信服的“证据链”来显示value
和{{ 1}}拥有你认为他们拥有的价值。
答案 1 :(得分:0)
示例代码:
public class QuickTester {
public static void main(String[] args) {
double value = 14.0;
double multiplier = 50.0;
// 1) Set breakpoint here
double xp = value * multiplier;
int exp = (int) xp;
System.out.println("Output (Double): " + exp);
// 2) Or set breakpoint here
int expInt = (int) (value * multiplier);
System.out.println("Output (Int): " + expInt);
}
}
<强>输出:强>
Output (Double): 700
Output (Int): 700
我两个都得到700(使用Java 7) 代码的问题在于其他地方,您需要向我们展示所有相关代码以获得更好的答案。
另一种选择:你可以在进行乘法的代码行设置断点,例如
double xp = value * multiplier;
并使用调试器检查乘法时的值(即值和乘数)。
从那里,你可以缩小问题所在。