我需要存储的值的范围(如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个数字。米不知道这是否是最好的方法。也许有些东西很容易丢失。
你错过的东西可能会改变你的数据库模式。 – 2012-07-11 19:17:38
最好的方法是继续并将适当的列添加到数据库。上帝帮助下一个可以应付这种黑客的可怜家伙。 – Randy 2012-07-11 19:17:55
@JamesMcLaughlin - 改变数据库模式是一件容易的事情。更改ORM代码和所有相关的数据结构就成了一个完整的噩梦。我花了几天时间,几乎没有,所以我正在寻找不同的方法。 – 2012-07-11 19:20:44