从 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" />
这按预期工作。 :)
我有以下代码:
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" />
这按预期工作。 :)