6.1暗黙的な型変換
等号の両側の演算に参加するオペランドの型は同じである必要があり、不一致の場合、以下の条件が満たされた場合に自動的に型変換が行われます。これを暗黙的な型変換と呼びます。
要件: 2 つのタイプに互換性があり、ターゲットのタイプが元のタイプより大きい
例: int と double は互換性があります (両方とも数値型です)。
例: double>int (小さいものから大きいものへ)
6.2 表示タイプの変換
2 つの型は互換性があります int-->double
大きいものは小さい double-->int に変換されます
文法:
ターゲットタイプの変数名 = (ターゲットタイプ) 元の値
明示的な型変換の例:
static void Main(string[] args)
{
double d = 5673.74;
int i;
// 强制转换 double 为 int
i = (int)d;
Console.WriteLine(i);
Console.ReadKey();
}
出力結果:
5673
短所:精度の低下、データの損失
6.3 必須の型変換
暗黙的な型変換と明示的な型変換は、データ損失が発生するため、どちらも安全ではない型変換です。そのため、C# には Parse メソッドと Convert メソッドという 2 つのメソッドが用意されています。
6.3.1 解析メソッド
Parse メソッドは、文字列型を任意の基本型に変換するために使用されます。ここでは、等号の左側と右側のデータ型に互換性がある必要があります。Parse の機能は、文字列型を対応するデータに変換することです。タイプ。
知らせ:
① 文字列の内容が空またはnullの場合、ArgumentNullExceptionがスローされます。
② 文字列の内容が数値でない場合は、FormatException がスローされます。
③文字列の内容が表す数値が、指定したデータ型で表現できる範囲を超えた場合、OverflowExceptionがスローされます。
方法 |
説明する |
int.Parse(文字列値) |
文字列型を整数型(int)に変換 |
char.Parse(文字列値) |
文字列型から文字型(char)への変換 |
double.Parse(文字列値) |
文字列型を倍精度浮動小数点型(double)に変換 |
Single.Parse(文字列値) |
文字列型を単精度浮動小数点型(float)に変換 |
int i = int.Parse(“111”);
i++;
Console.WriteLine(i);
出力結果: 112
6.3.2 TryParse メソッド
TryParse メソッドもデジタル コンテンツの文字列を int 型に変換しますが、例外が発生しない点で int.Parse よりも優れています。
変換が成功した場合は true を返し、変換が失敗した場合は false を返します。
明らかに、最後のパラメータは出力値であり、変換が失敗した場合、出力値は 0 になり、変換が成功した場合、対応する値が出力されます。
语法:int.TryParse(string s, out int result)
コード例:
Console.Write("请输入int类型的整数:");
int result = 0;
bool b = int.TryParse(Console.ReadLine(),out result);
if(b)
{
Console.WriteLine($"您输入的数字为{result}");
}
else
{
Console.WriteLine("输入错误!");
}
6.3.3 変換方法
2 つの変数の型に互換性がある場合は、自動型変換または強制型変換を使用できますが、string と int など、2 つの変数の型に互換性がない場合は、Convert という変換ファクトリーを使用して変換できます。
Convert メソッドは、データ型変換で最も柔軟なメソッドであり、指定されたデータ型の範囲を超えない限り、任意のデータ型の値を任意のデータ型に変換できます。
知らせ:
①Convertを使ってコンバートするには、「路面が通行可能であること」という条件も満たさなければなりません。
例: string a= "123"/ は int または double に変換できます。
string b= "123abc"/ は int または double に変換できません
②浮動小数点数をint型データに変換した後、丸め計算を行います。
③ このメソッドは char 型を処理するために使用することはできません。それ以外の場合は例外が報告されます。
C# には、次の組み込みの型変換メソッドが用意されています。
方法 |
説明する |
Convert.ToInt32() |
整数型(int)に変換 |
Convert.ToChar() |
文字型(char)に変換 |
Convert.ToDouble() |
倍精度浮動小数点型(double)に変換 |
Convert.ToSingle() |
単精度浮動小数点型(float)に変換 |
Convert.ToString() |
文字列型(string)に変換する |
Convert.ToDateTime() |
日付型(日時)に変換する |
さまざまな値の型を文字列型に変換するコード例
static void Main(string[] args)
{
int i = 75;
float f = 53.005f;
double d = 2345.7652;
bool b = true;
Console.WriteLine(i.ToString());
Console.WriteLine(f.ToString());
Console.WriteLine(d.ToString());
Console.WriteLine(b.ToString());
Console.ReadKey();
}
出力結果:
75
53.005
2345.7652
真実
6.3.4 型変換の演習
スワップ変数の演習
方法 1: 一時変数を使用する
入力文字列を int 値に変換するには、①int.Parse(string s)と②Convert.ToInt32(string value)の 2 つの方法があります。一時変数 temp を定義し、x の値を temp に代入し、次に y の値を x に代入し、次に temp に格納されている x の値を y に代入します (次のように理解できます: これは、空のカップ、コーヒー 1 杯、牛乳 1 杯、牛乳とコーヒーを交換する)
Console.WriteLine("请输入两个整数x,y");
//使用 int.parse(string s) 将输入的字符串为int值
int x = int.Parse(Console.ReadLine());
//使用Convert.ToInt32(string value)将输入的字符串转化为int值
int y = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("x={0},y={1}", x, y);
int temp;//定义一个临时变量temp
temp = x; //将x的值赋给temp
x = y; //将y的值赋给x
y = temp; //将temp存放的x的值赋给y
Console.WriteLine("x={0},y={1}",x,y);
COnsole.ReadKey();
方法 2: 加算と減算を使用する
x+y の合計の値を x に代入します (y の値は変更しません)。x の値から元の y の値を引いたものが x の値となり、得られた x の値が y に代入されます。次に、前のステップで取得した y の値 (実際には x の元の値) を x から減算して、x の現在の値 (y の元の値) を取得します。
Console.WriteLine("输入两个整数x,y");
int x = int.Parse(Console.ReadLine());
int y = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("x={0},y={1}", x, y);
x = x + y; //将x+y的和的值赋给x
y = x - y; //这个x-y等于x和y的和减去原先y的值剩余原先x的值
x = x - y; //这个x-y等于x+y的和减去y的值(y在上一步已经变成原先x的值),剩余原先的y的值
Console.WriteLine("x={0},y={1}", x, y);
COnsole.ReadKey();
秒コンバーターの演習
ユーザーに数字の文字列を入力し、その数字の文字列を日、時、分、秒に変換するように求めます。
Console.WriteLine("请输入要计算的秒数:");
string inputSec = Console.ReadLine();
int seconds = Convert.ToInt32(inputSec);
//先转换有多少整数天,不足一天的转换有多少整数小时,不足一小时的转换有多少分钟,不足一分钟的剩余多少秒
int day = seconds / 86400;//天数
int hour = (seconds % 86400) / 3600;//秒数
int mins = (seconds % 86400) % 3600;//分钟
int min = mins / 60;//分钟
int sec = mins % 60;//秒数
Console.WriteLine($"计算后是{day}天:{hour}小时:{min}分钟:{sec}秒");
COnsole.ReadKey();
うるう年かどうかを判断する
2 つの条件:
1) 年は 400 で割り切れます: 世紀閏年 2000
2) 年は 4 で割り切れるが、100 で割り切れない: 通常の閏年 2004
Console.WriteLine("请输入年份,我来帮你判断是否为闰年");
int year = Convert.ToInt32(Console.ReadLine());
bool isRun = (year % 400 == 0) || (year % 4 == 0 && year % 100 != 0);
Console.WriteLine(isRun);
//逻辑或的优先级是低于逻辑与的优先级的
Console.ReadKey();