今回は、小数点を消す方法について考えてみる。
方法としては、3種類紹介する。好きな方法を使ってみよう!
やりたい事としては、小数点を含めた数値を整数として扱いたい。
方法1:小数点を置換する
小数点のある数字なので、型としては Double型 or Single型 or Decimal型 のいずれかだと考えているが、一旦この数字を文字列に変換する。
文字列から、小数点を置換(Replace)を使って、消す。
double tmp = 12.345; //数値を定義
//文字に変換して、小数点を置換
string moji = tmp.ToString();
moji = moji.Replace(".", "");
//型を戻し、表示
int answer = int.Parse(moji);
Console.WriteLine(answer);
この方法では、シンプルに目的である「小数点を含めた数値を整数にする」を達成しています。
ただ、他の情報を欲しい場合に適しない。
方法2:小数点で分割する
同様に文字列に変換し、その文字列を分割(Split)する事。
この方法では、整数部分と小数部分の数値の情報も処理の過程として取得できる。
double tmp = 12.345; //数値を定義
//文字に変換して、小数点を分割
string moji = tmp.ToString();
string[] mojis = moji.Split('.');
//型を戻し表示([0]整数部 / [1]小数部)
int answer = int.Parse(mojis[0] + mojis[1]);
Console.WriteLine(answer);
この方法では、
小数点で分割する事で、
整数部分と小数部分に情報を分割し、
最後に文字結合する事で
目的である「小数点を含めた数値を整数にする」を達成しています。
方法3:10nをする
文字列に変換し、小数の桁数を求める。
小数の桁数を求めれば、10nすれば、小数点を含めた数値を整数にすることが可能。
先ほどの小数部分を求めてという方法でもいいが、面白みに欠けるので手段を変える。
double tmp = 12.345; //数値を定義
//文字に変換して、小数点の位置を取得
string moji = tmp.ToString();
int pointIndx = moji.IndexOf('.');
//小数点以降の文字数を取得する
int len = moji.Substring(pointIndx + 1).Length;
//10のlen乗した数値をかける。
int answer = (int)(tmp * Math.Pow(10,len));
Console.WriteLine(answer);
ちょっと数学的な考えよりのコードになっている。
小数部分が何桁あるかを取得することが出来る。
小数の桁数から10のn乗した数値をかければ、
目的である「小数点を含めた数値を整数にする」を達成しています。
まとめ
今回は、【小数点を含めた数値を整数にする】方法についての手法を紹介しました。
どちらも共通して言えることは、一旦文字列に変換する必要があるという事です。
文字列にしてからどのように考えるかである。
そして、どの方法をとるかで、
処理の過程で取得できる情報が変わってきます。
状況に応じて使い分けてもいいのかもしれません。
最後に
数値のままで考える方法については、思いつきませんでした。。。
他にも方法があれば教えていただければ嬉しいです。
業務でプログラミング(C#/VB/Python)を作っている。
挫折を何回も繰り返し、幾度の壁を乗り越えてきた。
乗り越えてきた事を忘れないように記録に残す。
同じ思いをしている人への情報提供になれたらと思う。
基本は初心者に向けたプログラムの情報を提供する。
コメント