我需要存储一定范围的值(例如25-50或100-200),但是为了避免大量的数据库重新设计和其他工作,我想使用一个Int32
来存储这两个数字。我意识到我那时每个数字只有16位,但这很好。
因此,使用两个整数值非常容易。我可以做类似的事情:
int mask = 50; //Right bits will have 50
mask |= (25 << 16); //Left bits will have 25
Console.WriteLine("Mask is: {0}", mask);
Console.WriteLine("Left is: {0}", (mask >> 16));
Console.WriteLine("Right is: {0}", (mask & 0xFFFF));
现在,我的右16位存储值50,左16位存储值25。
那是什么问题?
现在,我想使用相同的技术,但要存储两个非整数。例如1.5和1.75,或2.00和2.25。 .NET似乎不支持
float
,single
,double
或decimal
的位移运算符。 另外,我最终还需要在Javascript 中读取这些值,因此,无论使用哪种位编码浮点在平台之间完全兼容,都令人怀疑。最好的方法是什么?我正在考虑的一种方法是使用整数,但是将所有内容除以1000。这将使我在两个数字中都获得3个小数点精度,尽管我必须将整个内容存储为
long
才能存储超过65个的值。我不确定这是否是最好的方法。也许我很想念一些简单的事情。 最佳答案
一点数学就可以解决这个问题。
首先确定您的精度,例如2位数字,并且您的数字范围一直到1000
both = Math.Round(num1, 2) * 10000 + Math.Round(num2, 2);
前4位是num1,然后是num2。
您可以让他们恢复该过程。