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サーバーでは、次のようにできます:

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

文字列の結果=Regex.Replace(original、 "[^ 0-9]"、 "");

于 2010-01-07T19:20:46.360 に答える
1

簡単な方法は、使用することです

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

より高速な方法があるかもしれませんが、これがタイトな内部ループにない場合、Replace は正常に機能するはずです。

編集:コード例を修正し、加えて:

カルチャの問題に対処するには、NumberFormatInfo.NumberDecimalSeparatorを使用して、現在定義されている小数点記号を決定します。

于 2010-01-07T18:05:56.603 に答える
1

ただし、通常、SQLサーバーから取得する場合は、最初に整数/倍精度よりも文字列に変換するのではなく、行["列1"]のオブジェクトから必要な値に直接変換する必要があります。これにより、カルチャの処理の手間が省け、パフォーマンスが向上します少し

于 2010-01-07T18:52:28.777 に答える