我有以下代码:
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。
答案 0 :(得分:3)
在代码之前的某个地方,此值已经转换为Float(不是Double),然后又转换为字符串。
System.out.println(Float.valueOf("1483318800000"));
1.48331876E12
答案 1 :(得分:1)
感谢@ 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" />
这可以按预期工作。 :)