Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 4.0 将字符串转换为不带小数点和指数值的浮点_C# 4.0 - Fatal编程技术网

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#中just
float
的字段类型更接近精度为15-16位的
double
。电话号码不是float。它们是字符串,可以有数字和一些与格式无关的特殊字符,如
+
#
和`*`。试图将它们视为浮点数是一个非常非常糟糕的想法“DB中的电话号码列是浮点数类型的”——这听起来是一个糟糕的想法。你能改变它吗?不。这是主要的问题。那么这是哪个数据库,确切的字段类型是什么?请记住,C#
float
值只有7-9位精度-您试图用11位数字表示一个值,因此您肯定会丢失信息。对,因此C#中just
float
的字段类型更接近精度为15-16位的
double
。电话号码不是float。它们是字符串,可以有数字和一些与格式无关的特殊字符,如
+
#
和`*`。试图将它们视为浮点数是一个非常非常糟糕的想法。它忽略了一点,即将值作为
float
值存储在数据库中