如果数量很少那么它可以工作,但是数量越大那么它就错了。我的示例代码如下。
public void TestZZZZZZZZZ()
{
ulong val = ulong.MaxValue; // val = 18446744073709551615
string s = string.Format("{0}", val);
double d = Convert.ToDouble(s);
ulong result = ((ulong)d; // result = 0 <-- WRONG
Assert.AreEqual(val, result);
}
一些测试数据结果:
我有什么不对吗?请帮忙。
谢谢!
答案 0 :(得分:6)
那是因为<style name="AppBaseTheme" parent="android:Theme.DeviceDefault">
<item name="android:popupMenuStyle">@style/PopupMenu</item>
<item name="android:actionBarStyle">@style/MyActionBar</item>
<item name="actionBarStyle">@style/MyActionBar</item>
<item name="android:displayOptions">showHome|useLogo|showTitle</item>
</style>
<style name="AppTheme" parent="AppBaseTheme">
</style>
<style name="MyActionBar">
<item name="android:background">@drawable/gradient3</item>
<item name="android:titleTextStyle">@style/MyActionBarTitleText</item>
<item name="titleTextStyle">@style/MyActionBarTitleText</item>
</style>
<style name="PopupMenu" parent="android:Widget.DeviceDefault.ListPopupWindow">
<item name="android:popupBackground">@drawable/gradient1</item>
<item name="android:textColor">@color/ed</item>
</style>
<style name="MyActionBarTitleText" parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Title">
<item name="android:textColor">@color/ed</item>
<item name="android:textSize">18sp</item>
</style>
拥有64位数据,long
的精确度仅为53位。
答案 1 :(得分:2)
double具有16位数的精度。因此,请测试您的16位数字。
ulong val = 1234567890123456; // 16 digits
double d = val;
ulong result = (ulong)d;
Console.WriteLine(val == result); // prints true
在此之后你将失去精确度。
ulong val = 12345678901234567; // 17 digits
double d = val;
ulong result = (ulong)d;
Console.WriteLine(val == result); // prints false
答案 2 :(得分:1)
答案 3 :(得分:0)
我的解决方案是使用十进制来包含转换值(而不是双倍)。
感谢您的支持! 仲