应用程序适用于模拟器,但不适用于实际设备 - 浮点类型

时间:2012-10-30 19:44:32

标签: android

我的应用程序在使用模拟器时运行良好,但在真实设备上工作时崩溃了。我为Android 2.2编写代码。真实设备是2.3.6。

问题在于:

当我使用类似的东西时:

tvPlayerOneScores.setText("-" + numberFormat.format(level));

它在模拟器和真实设备上都很有用。

但是当我尝试这个时:

tvPlayerOneScores.setText("-" + numberFormat.format(level * 0.5f));

它适用于模拟器,但在真实设备上崩溃。

堆栈追踪:

java.lang.NumberFormatException
    at org.apache.harmony.luni.util.FloatingPointParser.parseFltImpl(Native Method)
    at org.apache.harmony.luni.util.FloatingPointParser.parseFloat(FloatingPointParser.java:321)
    at java.lang.Float.parseFloat(Float.java:323)
    at java.lang.Float.valueOf(Float.java:362)
    at com.amrotek.truthordare.GameActivity$4.onClick(GameActivity.java:287)
    at android.view.View.performClick(View.java:2552)
    at android.view.View$PerformClick.run(View.java:9229)
    at android.os.Handler.handleCallback(Handler.java:587)
    at android.os.Handler.dispatchMessage(Handler.java:92)
    at android.os.Looper.loop(Looper.java:130)
    at android.app.ActivityThread.main(ActivityThread.java:3701)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:507)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:624)
    at dalvik.system.NativeStart.main(Native Method)

编辑: 我将所有值乘以10,所以当我进行算术运算时,我只使用整数。最后我将结束值除以10.它有效:)

1 个答案:

答案 0 :(得分:1)

你应该在问题中包含错误的行而不是在评论中:

playerOnePoints = Float.valueOf(numberFormat.format(playerOnePoints - level * 0.5f));

因为它还不足以得出结论,所以这里有一个简短的清单供您检查:

  1. 为什么您需要使用numberFormat格式化数字,然后将其转换回valueOf

  2. numberFormat是什么,它真的产生了有效的浮点字符串吗?

  3. playerOnePoints浮动还是浮动?您不应该使用parseFloat()代替valueOf()吗?

  4. 最后,如果您仍然无法解决问题,我建议您更简单地替换上述行:

    playerOnePoints = playerOnePoints - level * 0.5f;
    

    那应该做的诀窍=)

    PS。如果我正确地理解了你对Math.floor()/ceil()的意图,那么你也希望熟悉parseFloat()/numberFormat()