私の質問はばかげているように見えるかもしれませんが、私はそれを打ちました。文字列値「155.300」があり、整数に変換したいと考えています。私は試みましたが、System.FormatExceptionを投げました....pls誰かが私を助けてくれます。
4 に答える
Double
ソースデータは文字列であるため、最初に変換してからキャストするint
か、を使用する必要がありますが、キャストは数値の一部を占めるのに対し、最も近い整数に丸めることをConvert.ToInt32
忘れないでください(切り捨て)Convert.ToInt32
int
double d = Convert.ToDouble("155.00");
int a = (int) d;
int b = Convert.ToInt32(d);
または1行で
int b =(int) Convert.ToDouble("155.000");
編集
小数点を千の区切り文字として使いたいので、ドイツの文化では次のことができると思います。
int b = ((int)Convert.ToDouble("154.500", new CultureInfo("de-DE")));
それはあなたに与えるでしょう154500
編集2
または、次のものと一緒に使用することint.Parse
をお勧めしNumberStyles.AllowThousands
ます。
int b = int.Parse("154.500", NumberStyles.AllowThousands, new CultureInfo("de-DE"));
最初にそれをdecimal
またはdouble
(おそらく10進データがdecimal
あるので使用するのが最適です)として解析し、次に要件に応じてキャストするか、のようなものを使用します。Math.Round
基本的に、取得したデータを常に考慮する必要があります。「155.300」は整数の文字列表現ではないため、整数として解析しようとしないでください。それをそのまま解析し、それを整数に変換します。
あるいは、最初に文字列表現をハックすることもできますが、個人的には、多くの場合、より脆弱なアプローチであることがわかります。
編集:これが実際にはすでに整数であるが、千の区切り記号がある場合は、まったく使用する必要がないことに注意してください。適切なカルチャと数値スタイルを指定して、をdouble
使用できます。int.Parse
int parsed = int.Parse(text, NumberStyles.Integer | NumberStyles.AllowThousands,
culture);
これを試すことができます:
string str = "123.123";
str = str.Remove(str.IndexOf('.'), 1);
int result;
int.TryParse(str, out result);
編集:あなたのコメントに基づいて、1000倍に変更されました。または、次のことを試すことができます。
string str = "123.123";
double result;
double.TryParse(str, out result);
int final = (int)(result * 1000);
これは実際の変換サンプルです。エッジ条件を特別に見てください。いくつかの丸め/キャスト手法を使用すると、出力が異なる場合があります
class Program
{
public static int MyToInt(string str)
{
double result;
bool success = Double.TryParse(str, out result);
if (!success)
{
throw new ArgumentException(
"Cannot parse a string into a double");
}
return Convert.ToInt32(result); // 156
//return (int)result; // 155 <<
//return (int)Math.Round(result); // 156
}
static void Main(string[] args)
{
string s = "155.500";
int value = MyToInt(s);
}
}