解説

JavaScriptで扱える範囲の数値を文字列として出力するためのMath拡張関数。
通常の変換では、浮動小数点の指数形式になってしまう数値も、小数点形式の文字列として出力できる。
更新日:2017年2月10日

使用方法

通常の変換結果


console.log( String( 0.00000000123 ).toString() );

// 結果
1.23e-9

本関数の変換結果


console.log( Math.toString( 0.00000000123 ) );

// 結果
0.00000000123

パラメタ

あらゆる数値
変換元数値

戻り値

String
変換結果(小数点形式)
引数が数値でない場合には「NaN」が返される。

コード


重要下記コードには依存関係が存在するため、実行するには、上記ライブラリをダウンロードして使用する必要がある。
数値to文字列変換関数


/*--------------------------------------------------------------------------------------------------------------
数値->文字列変換関数
	浮動書数点にも対応した変換を行う。
	浮動小数点の指数形式も、小数点形式に変換された文字列となる。
	
	引数
		val		... 変換元数値
		
	戻り値
		変換結果数値文字列
		引数が数値でない場合には「NaN」が返される。

	Example:
		console.log( Math.toString( -123 ) );
		console.log( Math.toString( 123 ) );
		console.log( Math.toString( 0.00000000123 ) );
		console.log( Math.toString( 1.23E-9 ) );
		console.log( Math.toString( 5E+30 ) );
		console.log( Math.toString( -2e-11 ) );
		console.log( Math.toString( Number.MAX_VALUE ) );
		
	作成履歴
		2017/02/07	新規作成(浅野 利博)
		2017/02/09	NaNはtypeofでnumber扱いになるため修正。(浅野 利博)
					コメントの修正。(浅野 利博)
--------------------------------------------------------------------------------------------------------------*/
Math.toString = function( val )
{
	// 引数チェック
	if(
		( typeof val !== 'number' )
		||
		isNaN( val )
	)
	{
		return NaN;
	}

	// 数値を文字列化する。
	var target = String(val).toLowerCase();

	// 指数形式か否かチェック
	var right_val = target.split('e')[1];
	{
		// 指数形式の場合
		if( right_val )
		{
			var left_val = 0;
			var decomal_length = 0;
			// 指数部符号判定
			{
				// 「-」の場合
				if( parseFloat( right_val ) < 0 )
				{
					// 浮動小数点表記を解析
					left_val = target.split('e')[0];
					left_val = left_val.replace( '.', '' );
					var count = Math.abs( parseFloat( right_val ) ) - 1;
					var result = '0.';
					for( var i=0; i<count; i++ )
					{
						result += '0';
					}
					// もしマイナスの値の場合
					if( parseFloat( left_val ) < 0 )
					{
						left_val = left_val.replace( '-', '' );
						return '-' + result + left_val;
					}
					return result + left_val;
				// 「+」の場合
				} else {
					// 浮動小数点表記を解析
					left_val = target.split('e')[0];
					var decimal_length = String(left_val).toLowerCase().split('.')[1];
		
					var count = Math.abs( parseFloat( right_val ) );
					if( decimal_length )
					{
						count -= decimal_length.length;
					}
					var result = left_val.replace( '.', '' );
					for( var i=0; i<count; i++ )
					{
						result += '0';
					}
					return result;
				}
			}
		// 浮動小数点以外の場合
		} else {
			// 指定された数値を文字列化したものを返す。
			return target;
		}
	}
}

必須要素

なし。

注意事項

  • 当たり前ではあるが、扱える数値の範囲は、
    Number.MAX_VALUE 以下で、Number.MIN_VALUE 以上である数値に限られる。

更新履歴

2017/02/07 … 浅野 利博
新規作成。
2017/02/08 … 浅野 利博
マイナスの値の場合の処理結果の不具合を修正。
符号の位置を正しくした。
2017/02/09 … 浅野 利博
コードのコメントを修正

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.