将字符串转换为float而不使用Decimal Point和Exponential值

时间:2016-06-16 08:43:24

标签: c#-4.0

我有一个场景,我收到电话号码,我必须将这些号码保存到数据库。

DB中的电话号码列的类型为float。 但我收到的电话号码是字符串。

它们可能包含空格或其他字符。

我编写了一个删除字符的代码,并将生成的字符串设置为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);

我的输入为"68 8845 62529"

我的输出为6.888456E+9

值存储在数据库68884560512

我希望输出为float f= 68884562529

最终数据类型必须是浮点数。

请帮忙。

2 个答案:

答案 0 :(得分:6)

第一个问题是选择浮点数字类型来表示电话号码是一个可怕的想法,这可能会导致你到处都出现问题。我会敦促你弄清楚需要多少努力才能改变这个糟糕的决定。如果你真的,真的无法改变这种情况,你至少可以改善自己所拥有的东西。

如果您使用SQL Server float type而没有指定精确度,则可能相当于使用double。因此,请使用double.Parse代替float.Parse,并将值作为double提供给数据库。忽略您可能在此过程中看到的任何文字表示 - 您只是试图保留double的数值。您目前面临的问题是您使用的float类型只有7-9位精度,但您尝试解析的值有11位数。

有效地尝试存储大整数。使用float类型为这些整数提供53位精度,因此任何小于2 53 的整数都应能够精确存储,并且有希望不要给你带来问题 - 但是你需要确保当你不可避免地想把它变回文本时,你就不会丢失信息。对于只有14位或更少数字的所有数字,这应该没问题。

正如评论中所述,您会发现难以理解根据是否以前导零开头而有所不同的数字,这些数字在数值方面显然无关紧要,但就手机而言很重要表示。

答案 1 :(得分:-1)

首先转换为字符串,然后在转换后删除'。'来自字符串。 现在你可以通过转换成十进制来存储为字符串和十进制。