-5

次のような「キロメートル」を定義する文字列がいくつかあります。

sValore = "64.8";
sValore = "64,8";
sValore = "64";
sValore = "64.82323523";

それをメートルに変換する関数が必要です。

最初の問題は、「double」で変換することです。私は試しました:

double valore = double.Parse(sValore.Replace(",", "."));

しかし実際には、first (64.8) の結果は、たとえば 648 になります (64.8 でなければなりません)。

より、valore * 1000私は問題を解決する必要がありますが、最後のケースはどうですか? 結果は 64823.3523 ではなく 64823 でなければなりません

では、これらの問題を解決するにはどうすればよいでしょうか。

4

3 に答える 3

5

doubleデータを aまたは aに解析してから 1000 を掛ける必要があるように思えdecimalます。理想的には、本当に必要でない限り、文字列表現に変換しないでください。(後のあいまいさを避けるために、単位を含む長さについて明示的なデータ構造が必要な場合もあります。)

できるだけ早くデータを最も自然な表現にするよう常に試み、その後はできるだけ長くその表現に固執してください。

于 2012-10-03T09:32:59.150 に答える
3

あなたの問題の 1 つは、小数点記号がドットまたはコンマのいずれかを使用して表されている悪いデータがあることです。ソースでその問題を修正できない場合は、既に行っているように交換を行うことができます:

var sValore = "64.82323523";
var kilometers = Decimal.Parse(
  sValore.Replace(",", "."),
  CultureInfo.InvariantCulture
);

CultureInfo.InvariantCultureとして指定していることに注意してくださいIFormatProvider。これにより、ドットが小数点として使用されるようになります。そうしないと、現在のカルチャが別の小数点記号を使用している場合、コードが壊れます。(それがあなたが直面している問題だと思います-「バローレ」はイタリア語で、その文化はドットではなくコンマを使用します。)

Decimal大規模な計算を実行したくない場合は、通常、10 進数の方が適しているため、値を a に解析します。必要に応じて、代わりに a を使用できますDouble

キロメートルからメートルへの変換は、単に på 1,000 を掛けるだけの問題です。メートルを整数として表現したいようですので、値を丸めてキャストする必要があります。

var meters = (Int32) Math.Round(1000*kilometers, 0);
于 2012-10-03T10:00:23.220 に答える
0

メソッドを使用Math.Round()して分数を最も近い整数値に丸めるか、値を整数にキャストして分数を単純に「削除」することができます。

double rounded = Math.Round(valore);
double truncated = (int)valore;
于 2012-10-03T09:33:28.090 に答える