我有一个场景,我收到电话号码,我必须将这些号码保存到数据库.
DB中的电话号码列是类型float.但我收到的电话号码是字符串.
它们可能包含空格或其他字符.
我编写了一个代码来删除字符并将生成的字符串音乐化为浮动.但我得到的是带有指数值的输出,而这些值又会在数据库中被修改.
我有以下代码
string phone1="68 8845 62529";
System.Text.RegularExpressions.Regex digitsOnly = new System.Text.RegularExpressions.Regex(@"[^\d]");
float f = float.Parse(digitsOnly.Replace(phone1, string.Empty), System.Globalization.CultureInfo.InvariantCulture.NumberFormat);
Run Code Online (Sandbox Code Playgroud)
我的意见是 "68 8845 62529"
我得到的输出为 6.888456E+9
值存储在数据库中 68884560512
我希望输出为 float f= 68884562529
最终数据类型必须是float.
请帮忙.
第一个问题是选择浮点数字类型来表示电话号码是一个可怕的想法,这可能会导致你到处都出现问题.我会敦促你弄清楚需要多少努力才能改变这个糟糕的决定.如果你真的,真的不能改变它,你至少可以改善你所拥有的.
如果您使用的是SQL Server float类型,而未指定精度,则可能与使用相当double.因此,使用double.Parse代替float.Parse,并将数据库的值作为一个提供double.忽略您可能在此过程中看到的任何文本表示 - 您只是想保留数字值double.您目前面临的问题是您使用的float类型只有7-9位精度,但您尝试解析的值有11位数.
你有效地试图存储大整数.使用该float类型为这些整数提供53位精度,因此任何小于2 53的 整数都应该能够精确存储,并且希望不会给你带来问题 - 但是你需要确保当你不可避免地想要把它转回文本,你这样做而不会丢失信息.对于只有14位或更少的所有数字,这应该没问题.
正如评论中所指出的,你会发现很难理解根据它们是否从前导零开始而有所不同的数字,这些数字在数值方面明显无关,但在电话表示方面很重要.