从 double 到 long 的错误转换

Incorrect conversion from double to long

我有以下代码:

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

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

如果我这样做 Long.parseLong(defaultValue.toString()) 那么我会得到一个 NumberFormatException 因为它是科学记数法。

如何保证 "good" 转化?

编辑: 转换代码是我在上面显示的第一行代码。我像这样设置默认值:

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

然后它被传递到 this function

在您的代码之前的某个地方,此值已转换为 Float(不是 Double),然后又转换回字符串。

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

1.48331876E12

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

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

<string name="settings_night_mode_default_start_time" translatable="false">1483318830000</string>

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

这按预期工作。 :)