因此,我们为其中一个客户提供的项目之一允许他们打印支票。支票上的其中一个字段是支票号码。目前,我们将检查号(用于报告目的)存储在数据库中作为int类型。
问题是客户希望将支票号码的大小增加到20位。该项目的一个功能是在打印多个支票时自动为每个支票分配支票号码。
例如,他们正在打印3张支票。他们输入起始支票编号为" 100123"然后单击"分配支票号码"女巫点上的按钮第一张要打印的支票得到" 100123"输入后,每个后面的检查给出相同的数字加1,所以第二次检查得到" 100124",第三次得到" 100125"等等。
问题是他们想要一个20位数的支票号码,对于任何数字数据类型来说都太大了。我唯一的解决方案是将支票号更改为字符串/ varchar,但这会破坏"分配支票号码"多次检查的过程,因为我无法增加字符串以获得下一个数字。
关于如何实施此类要求的任何想法?
答案 0 :(得分:2)
使用BigInteger
或使用decimal
,因为两者都超过了所需的精度。
答案 1 :(得分:0)
感谢所有人的反馈。
保存到数据库,因为varchar应该没问题。以下是我根据每个人的反馈提出的增量。
string sampleNum = "01999999999999999997";
for (int i = 0; i < 5; i++)
{
int first = int.Parse(sampleNum.Substring(0, 2));
ulong rest = ulong.Parse(sampleNum.Substring(2));
rest++;
if (rest > 999999999999999999)
{
first++;
rest = 0;
}
sampleNum = first.ToString().PadLeft(2, '0') + rest.ToString().PadLeft(18, '0');
Console.WriteLine(sampleNum);
}
以下是我在测试中得到的结果:
01999999999999999998
01999999999999999999
02000000000000000000
02000000000000000001
02000000000000000002