1

Oracleデータベースから次の値を(varcharとして)受け取っています。VisualStudioでは、次の値として7876,72 読み取られます。String

ケース1(予想されるケース):

私がデバッグしているとき、私は見ます:7876.72そして私がしようとするConvert.ToDecimal("7876.72")と私は得ています7876.72D

ケース2(間違ったケース):

私がデバッグしているとき、私は見ます:7876,72そして私がしようとするConvert.ToDecimal("7876,72")と私は得ています787672D

私はとをチェックしていますCultureInfo.CurrentCultureRegionInfo.CurrentRegionそしてそれは両方のマシンで同じです...

これの主な理由は次のとおりです。

Convert.ToDecimal("7876,72").ToString("0,0.00", CultureInfo.InvariantCulture)私に与える:787,672.00そしてそれはあるべきです7,876.72

Global.asax-Application_Start

Dim newCulture As CultureInfo = DirectCast(System.Threading.Thread.CurrentThread.CurrentCulture.Clone(), CultureInfo)
newCulture.DateTimeFormat.ShortDatePattern = "yyyy/MM/dd"
newCulture.DateTimeFormat.DateSeparator = "/"
newCulture.NumberFormat.CurrencyDecimalSeparator = "."
newCulture.NumberFormat.NumberDecimalSeparator = "."
Thread.CurrentThread.CurrentCulture = newCulture

両方のマシンで同じ値を維持する方法についてのアイデアはありますか?

前もって感謝します!

4

3 に答える 3

0

7876,72次の値はに等しいため、上記の出力は予期しないものになり787672ます。カンマは数値を区切るために使用されますが、変換時に小数点を示すためには使用されません。ただし、小数点は次の文字で表されます.

の代わりに小数点を取得したいので、文字,をに置き換えることをお勧めします。.,

string NumberFromDatabase = "7876,72"; //Initialize a new string of name NumberFromDatabase as 7876,72
string NumberAfterReplacement = NumberFromDatabase.Replace(',', '.'); //Initialize a new string of name NumberAfterReplacement as 7876.72
decimal Output = Convert.ToDecimal(NumberAfterReplacement); //Initialize a new decimal of name Output as 7876.72

ありがとう、
これがお役に立てば幸いです:)

于 2012-11-07T18:37:05.603 に答える
0

数字の場合:適切なものと一緒に使用TryParse(...)しますNumberStyle

日付の場合:それは良い習慣ですParseExact

于 2012-11-07T18:39:08.557 に答える
0

問題はOracleクライアントにあり、開発者のマシンとサーバーマシンの間に不整合がありました。これが、両方のマシンで日付と小数値が異なる主な理由でした。

ローカル、サーバー、および開発者のマシンの表示中にエラーが発生しました

解決策は、両方のマシンを同じように動作させることでした。そのために、Oracleクライアントのキーを変更し、必要なパラメーターを追加しました。

ここに画像の説明を入力してください

それが他の誰かを助けることを願っています。

于 2012-11-16T21:31:40.680 に答える