Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/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# 删除小数点后,将数字转换为字符串的好方法?_C#_Sql Server 2005_String_Numeric - Fatal编程技术网

C# 删除小数点后,将数字转换为字符串的好方法?

C# 删除小数点后,将数字转换为字符串的好方法?,c#,sql-server-2005,string,numeric,C#,Sql Server 2005,String,Numeric,我必须处理一个数值(来自SQLServer2005数字列),我需要将其转换为字符串,但需要注意的是小数点必须删除。数据本身可以通过数据表/数据行在C#中访问 例如,如果SQL Server列的读数为12345.678,则在完成所有操作时,字符串应为“12345678”。有没有可能为我指出一个解决这个问题的好方法?也许有一种.Net转换方法可以做到这一点,我不确定 谢谢 一个简单的方法是使用 string result = original.Replace(".", "") 可能有一种更快的方法

我必须处理一个数值(来自SQLServer2005数字列),我需要将其转换为字符串,但需要注意的是小数点必须删除。数据本身可以通过数据表/数据行在C#中访问

例如,如果SQL Server列的读数为12345.678,则在完成所有操作时,字符串应为“12345678”。有没有可能为我指出一个解决这个问题的好方法?也许有一种.Net转换方法可以做到这一点,我不确定


谢谢

一个简单的方法是使用

string result = original.Replace(".", "")
可能有一种更快的方法,但如果这不是一个紧密的内部循环,那么Replace应该可以正常工作

编辑:固定代码示例,加上:


为了解决区域性问题,可以使用来确定当前定义的十进制分隔符。

类似的东西怎么样

var numberWithPoint = dbGetNumber();

string numberWithOutPoint = numberWithPoint.ToString().Replace(".", string.Empty);
它既快又脏,但它完成工作相当简单。

你可以用c语言完成,比如:

在sql server中,可以按如下方式执行:

SELECT REPLACE( cast(myCol as varchar), '.', '') as FormattedNumber 
FROM ...
那么:

// using System.Globalization;
SqlCommand cm = new SqlCommand("SELECT 12345.678 as decimal");
// ...
SqlDataReader dr = cm.ExecuteReader();
if(dr.Read())
{
    string value = dr.GetValue(0).ToString()
        .Replace(NumberFormatInfo.CurrentInfo.NumberDecimalSeparator, "")
}

有几种可能的方法。可以使用特定区域性将其转换为字符串,以确保句点用作小数分隔符,然后删除句点:

string s = num.ToString(CultureInfo.InvariantCulture).Replace(".", String.Empty);
您可以使用更数值化的方法将valye乘以10,直到没有小数:

while (num != Math.Floor(num)) num *= 10.0;
string s = ((int)num).ToString();

但通常当它来自sql server时,您不应该首先将其转换为字符串而不是整数/双精度,而是直接将其从第[“column1”]行中的对象转换为所需的值,这将节省您处理区域性的麻烦,并稍微提高性能

哇,很高兴我今天早上多喝了一杯咖啡;-)虽然没有接受3个参数的替换。应该是
original.Replace(“.”,”)
)首先,您尚未指定如何将数字转换为字符串。如果转换使用的区域性设置使用句点以外的内容作为小数分隔符,则此设置无效……如果当前区域性使用句点以外的内容作为小数分隔符,则此设置无效。OP从未指定需要处理多个区域性。@David:他要求“一个好方法”,我不认为这是一个很好的方法,如果它打破了当前的文化改变…我想一些东西沿着这些线…谢谢小费。至于文化信息,这不应该是一个问题,但必须牢记在心。StackOverflow再一次显示出它是一个巨大的资源。谢谢大家的建议和评论!谢谢@larryq,虽然我实际上会将“”改为string.empty,这是我通常使用的,但在匆忙中忘记了:PJust put
SqlDataReader
,因为OP说“数值来自SQL服务器”;此版本处理区域性问题如果当前区域性使用句点以外的内容作为小数分隔符,则C#版本不起作用。如果区域性是一个问题,则始终可以将小数替换为
CultureInfo.CurrentCulture.NumberFormat.CurrencyDecimalSeparator
,虽然没有提到,但有一点没有被任何答案直接提到,那就是转换后的字符串中可能有科学符号。你也需要摆脱它吗?
while (num != Math.Floor(num)) num *= 10.0;
string s = ((int)num).ToString();