【问题标题】:Incorrect conversion from double to long从 double 到 long 的错误转换
【发布时间】:2017-11-29 08:43:28
【问题描述】:

我有以下代码:

Double.valueOf(defaultValue.toString()).longValue()

我正在使用这一行来解析我为 Android 创建的 TimePicker 的 defaultValue。我将它的默认值(在我的PreferenceScreen xml 中)设置为1483318800000。出于某种原因,它以科学记数法开始:1.48331876E12,然后在运行完上面的代码后:1483318760000。它最终被关闭。我需要它是正确的,因为这是一个以毫秒为单位的时间戳。我要在晚上 8 点拍摄——但我只能在晚上 7 点 59 分拍摄(因为转换之后,它就关闭了)。

如果我输入Long.parseLong(defaultValue.toString()),我会得到NumberFormatException,因为它是科学计数法。

我如何保证“良好” 转化?

编辑:转换代码是我上面显示的第一行代码。我正在设置默认值,如下所示:

    <TimePreference
            android:defaultValue="1483318830000"
            android:key="settings_night_mode_start_time"
            android:title="@string/settings_night_mode_start" />

然后它被传递到this function

【问题讨论】:

  • 修复将 1483318800000 转换为 1.48331876E12 的地方,因为那部分做得不好。正确的值应该是 1.4833188E12。
  • 将会话代码显示为 1.48331876E12
  • defaultValue得到了哪种类型?
  • 我已更新 OP 以显示所有内容。

标签: java android long-integer type-conversion epoch


【解决方案1】:

在您的代码之前的某个地方,这个值已经转换为浮点数(不是双精度数),然后又转换回字符串。

System.out.println(Float.valueOf("1483318800000"));

1.48331876E12

【讨论】:

  • 看来这可能是Android的问题。在该长度的Preference xml 中设置默认值可能会自动转换为浮点数。谢谢!
  • Turns out I was right.。谢谢你,我找到了解决办法。我很感激!
【解决方案2】:

感谢@rustot 的回答,我发现there is an issue with Preferences in Android regarding parsing the default values.

解决方法是使用字符串资源设置默认值,而不是我给它的 long 值。

&lt;string name="settings_night_mode_default_start_time" translatable="false"&gt;1483318830000&lt;/string&gt;

    <TimePreference
            android:defaultValue="@string/settings_night_mode_default_start_time"
            android:key="settings_night_mode_start_time"
            android:title="@string/settings_night_mode_start" />

这按预期工作。 :)

【讨论】:

    猜你喜欢
    • 2014-09-30
    • 1970-01-01
    • 2011-04-13
    • 2019-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多