0

我必须处理需要转换为字符串的数值(来自 SQL Server 2005 数值列),但需要注意必须删除小数点。数据本身可通过 DataTable/DataRow 在 C# 中访问。

例如,如果 SQL Server 列读取 12345.678,那么当一切都说完后,字符串应该是“12345678”。是否有可能为我指出一个好的方法?也许有一个.Net转换方法可以做到这一点,我不确定。

谢谢!

4

7 回答 7

4

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

string s = num.ToString(CultureInfo.InvariantCulture).Replace(".", String.Empty);

您可以使用更数字的方法将 valye 乘以 10,直到没有小数:

while (num != Math.Floor(num)) num *= 10.0;
string s = ((int)num).ToString();
于 2010-01-07T18:13:48.197 回答
3

怎么样的东西

var numberWithPoint = dbGetNumber();

string numberWithOutPoint = numberWithPoint.ToString().Replace(".", string.Empty);

它又快又脏,但它可以相当简单地完成工作。

于 2010-01-07T18:05:57.650 回答
2

你可以在 C# 中做到这一点:

var myNum = 12345.678;
var myString = myNum.ToString().Replace(".","");

在 sql server 中,你可以这样做:

SELECT REPLACE( cast(myCol as varchar), '.', '') as FormattedNumber 
FROM ...
于 2010-01-07T18:06:54.330 回答
2

关于什么:

// 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, "")
}
于 2010-01-07T18:07:12.093 回答
1

一个简单的方法是使用

string result = original.Replace(".", "")

可能有更快的方法,但如果这不是在一个紧密的内部循环中,替换应该可以正常工作。

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

为了解决文化问题,可以使用NumberFormatInfo.NumberDecimalSeparator来确定当前定义的小数分隔符。

于 2010-01-07T18:05:56.603 回答
1

但通常当它来自 sql server 时,您不应该先将其转换为字符串而不是整数/双精度,而是直接将其从 row["column1"] 中的对象转换为所需的值,这样可以省去处理文化的麻烦并提高性能一点点

于 2010-01-07T18:52:28.777 回答
1

字符串结果 = Regex.Replace(original, "[^0-9]", "");

于 2010-01-07T19:20:46.360 回答