Web検索はbingがおすすめ!

数値から整数部と小数部が分離された文字列に変換する - C#

数値から整数部と小数部が分離された文字列に変換するコードを紹介します。

概要

アプリケーションでの表示などで、整数部と小数部に表示領域や、テキストボックスが分かれた状態で数値を表示したい場合があります。
この記事では、小数点の数値を整数部分と小数分に変換してそれぞれを文字列にして画面に表示する手順を紹介します。
以下に例を示します。

数値の入力 整数部の出力 小数部の出力
1.582 1 582
24.28 24 28
1.0046 1 0046

この記事では、与えられた数値を整数部と小数部に分けて文字列に変換するコードを紹介します。
メモ
この記事で紹介されている処理の逆の処理、整数部分と小数部分に分かれた文字列を数値に変換する方法は こちらの記事を参照して下さい。

実装

UI

下図のフォームを作成します。テキストボックス3つとボタンを1つ配置します。

コード

以下のコードを記述します。
(フォームのコード)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace ConvertSeparateIntegerDecimal
{
  public partial class FormNumberToSeparateString : Form
  {
    public FormNumberToSeparateString()
    {
      InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
      decimal inputValue = Convert.ToDecimal(textBox1.Text);
      StringRealNumber srn = DecimalToStringRealNumber(inputValue);
      textBox2.Text = srn.IntegerPart;
      textBox3.Text = srn.DecimalPart;
    }

    public StringRealNumber DecimalToStringRealNumber(decimal value)
    {
      int IntPart = (int)Math.Truncate(value);
      decimal DecimalPart = value - Math.Truncate(value);

      StringRealNumber srn = new StringRealNumber();
      srn.IntegerPart = Convert.ToString(IntPart);

      if (DecimalPart > 0) {
        string strDecimal = DecimalPart.ToString();
        srn.DecimalPart = strDecimal.Split('.')[1];
      }

      return srn;
    }
  }

}
StringRealNumber.cs)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;

namespace ConvertSeparateIntegerDecimal
{
  public class StringRealNumber
  {
    private string _IntegerPart;
    private string _DecimalPart;

    public string IntegerPart
    {
      get
      {
        return _IntegerPart;
      }
      set
      {
        Regex reg = new Regex("^(|[0-9]*)$");
        if (reg.Match(value).Success == true) {
          _IntegerPart = value;
        }
        else {
          throw new FormatException("設定する値が数値を表現してません。");
        }
      }
    }

    public string DecimalPart
    {
      get
      {
        return _DecimalPart;
      }
      set
      {
        Regex reg = new Regex("^(|[0-9]*)$");
        if (reg.Match(value).Success == true) {
          _DecimalPart = value;
        }
        else {
          throw new FormatException("設定する値が数値を表現してません。");
        }
      }
    }

    public StringRealNumber()
    {
      IntegerPart = "";
      DecimalPart = "";
    }
  }
}

解説

StringRealNumber.cs

数値の整数部と小数部を保存するクラスです。値は文字列で保持しますが、値の設定時に数値以外の文字が入力されないようにチェックしています。

フォーム

ボタンをクリックすると、以下のコードを実行します。
DecimalToStringRealNumber()メソッドを実行し、入力された数値を整数部分と小数部分の文字列に変換します。 結果は、StringRealNumber オブジェクトで戻ります。
StringRealNumber オブジェクトの IntegerPart DecimalPart プロパティの値をテキストボックスのTextプロパティに代入して画面に表示します。
  private void button1_Click(object sender, EventArgs e)
  {
    decimal inputValue = Convert.ToDecimal(textBox1.Text);
    StringRealNumber srn = DecimalToStringRealNumber(inputValue);
    textBox2.Text = srn.IntegerPart;
    textBox3.Text = srn.DecimalPart;
  }

変換する処理が以下の DecimalToStringRealNumber() メソッドになります。
はじめに、Truncateメソッドを呼び出し、小数部分を切り捨て整数部分を取り出します。 次に、元の値から整数値を引き、小数部分を求めます。
小数部分が0でなければ、小数を文字列に変換し、最初の2文字を削除します。 実際には、. を区切り文字として分割し、後方の文字列を取り出す処理を実装しています。
整数部分を文字列に変換した値と、小数部分を文字列に変換して先頭2文字を削除した文字列を StringRealNumber クラスのオブジェクトに代入して戻り値として返します。
    public StringRealNumber DecimalToStringRealNumber(decimal value)
    {
      int IntPart = (int)Math.Truncate(value);
      decimal DecimalPart = value - Math.Truncate(value);

      StringRealNumber srn = new StringRealNumber();
      srn.IntegerPart = Convert.ToString(IntPart);

      if (DecimalPart > 0) {
        string strDecimal = DecimalPart.ToString();
        srn.DecimalPart = strDecimal.Split('.')[1];
      }

      return srn;
    }

実行結果

プロジェクトを実行します。下図のウィンドウが表示されます。


上部の入力のテキストボックスに数値を入力します。今回は、"1.587" を入力します。入力後[button1]ボタンをクリックします。


入力した数値の整数部分と小数部分に分解され、整数部分のテキストボックスに"1"が、小数部分のテキストボックスに"587"が表示されます。


"25.226987" を入力した場合の結果です。整数部分には"25" 小数部分には"226987" が表示されます。


"0.1875" を入力した場合の結果です。整数部分には"0" 小数部分には"1875" が表示されます。


"4.002521" を入力した場合の結果です。整数部分には"4" 小数部分には "002521" が表示されます。


小数点の数値を整数部分と小数分に変換してそれぞれを文字列にして画面に表示できました。
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
掲載日: 2024-06-30
iPentec all rights reserverd.