整数部と小数部が分離された文字列から数値に変換する - C#
整数部と小数部が分離された文字列から数値に変換するコードを紹介します。
概要
アプリケーションの入力などで、整数部と小数部に分かれた入力を数値に変換したい場合があります。
以下に例を示します。
整数部の入力 | 小数部の入力 | 変換後の結果 |
3 | 4 | 3.4 |
1 | 156 | 1.156 |
24 | 057 | 24.057 |
この記事では、整数部と小数部を分けて文字列で入力された値を数値に変換するコードを紹介します。
メモ
この記事で紹介されている処理の逆の処理、数値を整数部分と小数部分に分かれた文字列に変換する方法は
こちらの記事を参照して下さい。
実装
UI
下図のフォームを作成します。
コード
以下のコードを記述します。
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 FormSeparateStringToNumber : Form
{
public FormSeparateStringToNumber()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
StringRealNumber srn = new StringRealNumber();
srn.IntegerPart = textBox1.Text;
srn.DecimalPart = textBox2.Text;
textBox3.Text += Convert.ToString( StringRealNumberToDecimal(srn) );
}
public decimal StringRealNumberToDecimal(StringRealNumber numberValue)
{
double number = 0;
if (numberValue.DecimalPart == "") {
}
else {
number = double.Parse(numberValue.DecimalPart);
number = number / Math.Pow(10, numberValue.DecimalPart.Length);
}
return Convert.ToDecimal(Convert.ToInt32(numberValue.IntegerPart) + number);
}
}
}
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
数値の整数部と小数部を保存するクラスです。値は文字列で保持しますが、値の設定時に数値以外の文字が入力されないようにチェックしています。
フォーム
ボタンをクリックすると、以下のコードを実行します。
StringRealNumberクラスを作成し、テキストボックスの値を
IntegerPart
と
DecimalPart
に代入しています。
テキストボックスに入力する文字列は数値である必要があります。
StringRealNumberToDecimal(srn)
メソッドを呼び出して、整数部と小数部が分かれた文字列の値を数値に変換して、
変換された値を下部のテキストボックスに表示します。
private void button1_Click(object sender, EventArgs e)
{
StringRealNumber srn = new StringRealNumber();
srn.IntegerPart = textBox1.Text;
srn.DecimalPart = textBox2.Text;
textBox3.Text += Convert.ToString( StringRealNumberToDecimal(srn) );
}
変換する処理が以下の StringRealNumberToDecimal() メソッドになります。
はじめに小数部分の文字列を確認し、空文字の場合は、小数部分は0とします。
空文字でない場合は、文字列を数値に変換します。変換後に数値を
10の文字列の長さ乗
の値で割ります。
文字列の長さが
5
の場合は 10の5乗の 100000 で割ります。
割った値と、整数部の値をそのまま数値に変換した値を加算して結果とします。
public decimal StringRealNumberToDecimal(StringRealNumber numberValue)
{
double number = 0;
if (numberValue.DecimalPart == "") {
}
else {
number = double.Parse(numberValue.DecimalPart);
number = number / Math.Pow(10, numberValue.DecimalPart.Length);
}
return Convert.ToDecimal(Convert.ToInt32(numberValue.IntegerPart) + number);
}
整数部の入力 | 小数部の入力 | 小数部長 | 小数部/(10^小数部長さ) | 整数部 + 小数部/Pow(10,小数部長さ) |
6 | 2580 | 4 | 0.258 | 6.258 |
1 | 00376 | 5 | 0.00376 | 1.00376 |
実行結果
上記のアプリケーションを実行します。下図のウィンドウが表示されます。
上部のテキストボックスに値を入力します。整数に"4" 小数に "2512" を入力します。入力後[button1]をクリックします。
4.2512 が下部のテキストボックスに表示されました。整数部と小数部を合わせた値に変換できています。
整数に"1" 小数に "00178" を入力して[button1]をクリックした場合の結果です。1.00178 が表示されます。
整数に"8" 小数に "209" の場合の結果です。8.209 が表示されます。
整数に"15" 小数に "0482" の場合の結果です。15.0482 が表示されます。
整数部と小数部を分けて文字列で入力された値を数値に変換できました。
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用