我必须处理需要转换为字符串的数值(来自 SQL Server 2005 数值列),但需要注意必须删除小数点。数据本身可通过 DataTable/DataRow 在 C# 中访问。
例如,如果 SQL Server 列读取 12345.678,那么当一切都说完后,字符串应该是“12345678”。是否有可能为我指出一个好的方法?也许有一个.Net转换方法可以做到这一点,我不确定。
谢谢!
我必须处理需要转换为字符串的数值(来自 SQL Server 2005 数值列),但需要注意必须删除小数点。数据本身可通过 DataTable/DataRow 在 C# 中访问。
例如,如果 SQL Server 列读取 12345.678,那么当一切都说完后,字符串应该是“12345678”。是否有可能为我指出一个好的方法?也许有一个.Net转换方法可以做到这一点,我不确定。
谢谢!
有几种可能的方法。您可以使用特定区域性将其转换为字符串,以确保将句点用作小数分隔符,然后删除句点:
string s = num.ToString(CultureInfo.InvariantCulture).Replace(".", String.Empty);
您可以使用更数字的方法将 valye 乘以 10,直到没有小数:
while (num != Math.Floor(num)) num *= 10.0;
string s = ((int)num).ToString();
怎么样的东西
var numberWithPoint = dbGetNumber();
string numberWithOutPoint = numberWithPoint.ToString().Replace(".", string.Empty);
它又快又脏,但它可以相当简单地完成工作。
你可以在 C# 中做到这一点:
var myNum = 12345.678;
var myString = myNum.ToString().Replace(".","");
在 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 result = original.Replace(".", "")
可能有更快的方法,但如果这不是在一个紧密的内部循环中,替换应该可以正常工作。
编辑:固定代码示例,加上:
为了解决文化问题,可以使用NumberFormatInfo.NumberDecimalSeparator来确定当前定义的小数分隔符。
但通常当它来自 sql server 时,您不应该先将其转换为字符串而不是整数/双精度,而是直接将其从 row["column1"] 中的对象转换为所需的值,这样可以省去处理文化的麻烦并提高性能一点点
字符串结果 = Regex.Replace(original, "[^0-9]", "");