Хороший способ перевести числовое значение в строку с удалением десятичной точки? - PullRequest
0 голосов
/ 07 января 2010

Мне приходится иметь дело с числовым значением (исходя из числового столбца SQL Server 2005), которое мне нужно преобразовать в строку, с оговоркой, что десятичная точка должна быть удалена. Сами данные доступны в C # через DataTable / DataRow.

Например, если в столбце SQL Server указано 12345.678, строка должна быть «12345678», когда все сказано и сделано. Можно ли указать мне на хороший подход к этому? Может быть, есть метод преобразования .Net, который делает это, я не уверен.

Спасибо!

Ответы [ 7 ]

4 голосов
/ 07 января 2010

Есть несколько возможных подходов. Вы можете преобразовать его в строку с использованием определенной культуры, чтобы быть уверенным, что период используется в качестве десятичного разделителя, а затем удалить период:

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

Вы можете использовать более числовой подход для умножения значения на 10 до десятичных дробей:

while (num != Math.Floor(num)) num *= 10.0;
string s = ((int)num).ToString();
3 голосов
/ 07 января 2010

что-то вроде

var numberWithPoint = dbGetNumber();

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

это быстро и грязно, но это делает работу довольно просто.

2 голосов
/ 07 января 2010

А как же:

// 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, "")
}
2 голосов
/ 07 января 2010

вы можете сделать это в c # как:

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

на сервере sql, вы можете сделать это следующим образом:

SELECT REPLACE( cast(myCol as varchar), '.', '') as FormattedNumber 
FROM ...
1 голос
/ 07 января 2010

string result = Regex.Replace (original, "[^ 0-9]", "");

1 голос
/ 07 января 2010

но обычно, когда он приходит с сервера sql, вам не следует сначала преобразовывать его в строку, а не в целое число / число в два раза, а преобразовывать его непосредственно из объекта в строке ["column1"] в необходимое значение, это избавит вас от проблем при работе с культурами и немного улучшить производительность

1 голос
/ 07 января 2010

Простой метод заключается в использовании

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

Возможно, существует более быстрый метод, но если он не находится в тесном внутреннем цикле, замена должна работать нормально.

РЕДАКТИРОВАТЬ: пример с фиксированным кодом, плюс:

Для решения проблем культуры можно использовать NumberFormatInfo.NumberDecimalSeparator , чтобы определить определенный в настоящее время десятичный разделитель.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...