C# 4.0 将字符串转换为不带小数点和指数值的浮点
我有一个场景,我收到电话号码,我必须将这些号码保存到数据库中C# 4.0 将字符串转换为不带小数点和指数值的浮点,c#-4.0,C# 4.0,我有一个场景,我收到电话号码,我必须将这些号码保存到数据库中 DB中的电话号码列的类型为float。 但我收到的电话号码是字符串 它们可能包含空格或其他字符 我已经编写了一个代码来删除字符,并将结果字符串协调为float。但我得到的是指数值的输出,然后在数据库中修改 我有以下代码 string phone1="68 8845 62529"; System.Text.RegularExpressions.Regex digitsOnly = new System.Text.RegularExpre
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
最后的数据类型必须是float
请提供帮助。首先转换为字符串,然后从字符串中删除“.”。
现在,您可以通过转换为十进制存储为字符串和十进制。首先转换为字符串,然后从字符串中删除“.”。
现在,您可以通过转换为十进制来存储字符串和十进制。第一个问题是,选择浮点数字类型来表示电话号码是一个糟糕的想法,这可能会给您带来各种各样的问题。我会敦促你们计算出要改变这个糟糕的决定需要付出多少努力。如果你真的,真的不能改变这一点,你至少可以改进你所拥有的 如果您使用的是,但没有指定精度,那么这可能相当于使用
double
。因此,使用double.Parse
而不是float.Parse
,并将值作为double
提供给数据库。忽略沿途可能看到的任何文本表示-您只是试图保留双精度的数值。您当前面临的问题是,您使用的是float
类型,它只有7-9位精度,但您试图解析的值有11位精度
您实际上是在尝试存储大整数。使用float
类型可以为这些整数提供53位的精度,因此任何小于253的整数都应该能够精确存储,并且希望不会给您带来问题-但您需要确保,当不可避免地要将其转换回文本时,您可以在不丢失信息的情况下执行此操作。对于所有只有14位或更少的数字,这应该是可以的
正如评论中提到的,你会发现很难理解数字的不同之处,因为它们是否以前导零开头,而前导零显然与数值无关,但是对于电话表示法来说很重要。第一个问题是,选择浮点数字类型来表示电话号码是一个糟糕的想法,这可能会给您带来各种各样的问题。我会敦促你们计算出要改变这个糟糕的决定需要付出多少努力。如果你真的,真的不能改变这一点,你至少可以改进你所拥有的
如果您使用的是,但没有指定精度,那么这可能相当于使用double
。因此,使用double.Parse
而不是float.Parse
,并将值作为double
提供给数据库。忽略沿途可能看到的任何文本表示-您只是试图保留双精度的数值。您当前面临的问题是,您使用的是float
类型,它只有7-9位精度,但您试图解析的值有11位精度
您实际上是在尝试存储大整数。使用float
类型可以为这些整数提供53位的精度,因此任何小于253的整数都应该能够精确存储,并且希望不会给您带来问题-但您需要确保,当不可避免地要将其转换回文本时,您可以在不丢失信息的情况下执行此操作。对于所有只有14位或更少的数字,这应该是可以的
正如在评论中所指出的,你会发现很难理解不同的数字,因为它们是否以前导零开头,这显然与数字值无关,但对于电话表示很重要。“DB中的电话号码列是float类型的”-这听起来不是一个好主意。你能改变它吗?不。这是主要的问题。那么这是哪个数据库,确切的字段类型是什么?请记住,C#float
值只有7-9位精度-您试图用11位数字表示一个值,因此您肯定会丢失信息。对,因此C#中justfloat
的字段类型更接近精度为15-16位的double
。电话号码不是float。它们是字符串,可以有数字和一些与格式无关的特殊字符,如+
、#
和`*`。试图将它们视为浮点数是一个非常非常糟糕的想法“DB中的电话号码列是浮点数类型的”——这听起来是一个糟糕的想法。你能改变它吗?不。这是主要的问题。那么这是哪个数据库,确切的字段类型是什么?请记住,C#float
值只有7-9位精度-您试图用11位数字表示一个值,因此您肯定会丢失信息。对,因此C#中justfloat
的字段类型更接近精度为15-16位的double
。电话号码不是float。它们是字符串,可以有数字和一些与格式无关的特殊字符,如+
、#
和`*`。试图将它们视为浮点数是一个非常非常糟糕的想法。它忽略了一点,即将值作为float
值存储在数据库中