【问题标题】:How to get back a decimal integer - java?如何取回十进制整数 - java?
【发布时间】:2017-04-28 14:52:22
【问题描述】:

所以我试图转换这个方程:[10^(((level + 7)/2)^0.5)] - 100;

我执行以下代码:

  float A = (level + 7)/2;
  float B = (float) Math.pow(A,0.5);
  float totalExp = (float) ((Math.pow(10,B))-100);

如果我为关卡输入2,我应该返回 32.22706056。但是 Math.pow(A,0.5) 给我返回一个 double,所以如果 level = 2,那么 A = 4.5,但我得到的是 4.0,同样 Math.pow(4.5,0.5) 给我返回一个 double,没有十进制数并抛出我所有的计算。希望有人可以在这里提供帮助!

干杯!

【问题讨论】:

  • 双精度表示双精度浮点
  • 啊,我明白了。所以如果我想取回十进制值,比如 4.5 而不是 4.0,我该怎么做?
  • levelint 吗?如果是,那么你正在做整数算术。确保在进行计算之前转换为浮点数。例如通过这样做:float A = (level + 7.0f) / 2.0f;

标签: java math precision


【解决方案1】:

在你的程序中使用浮点字面量:

 float A = (float)((level + 7.0)/2.0);
 float B = (float) Math.pow(A,0.5);
 float totalExp = (float) ((Math.pow(10.0,B))-100.0);

假设level 是一个整数,(level + 7)/2 是一个整数表达式,在分配给浮点数之前会丢失小数。

【讨论】:

  • 啊,我明白了。那么 level 是 double 还是 float 有关系吗?
  • 如果level 是浮点数,则您的原始代码将起作用。注意:我必须添加一个 (float) 强制转换以避免可能的精度损失 double->float 的编译器错误。
  • 是的,我明白了。感谢您的澄清!
【解决方案2】:

尝试将100 替换为100.0100D。同样修复整数2

【讨论】:

  • 整数 2 应该是 double 还是 float 还是无关紧要?
【解决方案3】:

试试这个

    float level = 2;

    float A = (level + 7) / 2;
    float B = (float) Math.pow(A, 0.5);
    float totalExp = (float) ((Math.pow(10, B)) - 100);

它将返回 totalExp = 32.22703

【讨论】:

    猜你喜欢
    • 2011-07-12
    • 2021-09-29
    • 2015-08-17
    • 2015-04-04
    • 1970-01-01
    • 2010-10-25
    • 2012-03-08
    • 2011-08-18
    相关资源
    最近更新 更多