<FormatNumber関数を使用して小数点固定、%を表示>
こんにちは、Ken3です。
前回は、
世の中、外見重要、男性も化粧する時代(オイオイ、ホントか?)
でした。(上の一行じゃ意味不明だけど)
今回も、アンケート結果の出力を少し変えてみます。
決り文句で、元が悪いと化粧もイミナイって?そんなぁ〜
あまり期待しないでね。
/*
* 1.少し化粧をほどこした出力ページ
*/
前回までに行った、集計結果の表示パターンは、
http://www.ken3.org/cgi-bin/test/test013-3.asp ←そのまま人数を表示
http://www.ken3.org/cgi-bin/test/test014-1.asp ←表(TABLE)にした
http://www.ken3.org/cgi-bin/test/test014-2.asp ←表にワクをつけた
でした。
どれもなんかしっくりこないと思いつつ、
今回も少しイタズラしてみます。
街中(インターネット上)でアンケート結果ページを見ると、
不満40.1%とか、%表示してますよね。
今回は、その化粧の方法をまねして、%表示にチャレンジしてみます。
なんだぁって感じですよね。
/*
* 2.回答数÷全体数で計算だよね。
*/
%の計算は、回答数÷全体数で計算だよね。
それでは、軽く追加します。
-- test015-1.asp --
<%@LANGUAGE=VBScript%>
<html>
<head>
<title>%の計算は、回答数÷全体数で計算だよね</title>
</head>
<body>
<h2>%の計算は、回答数÷全体数で計算だよね</h2>
test015-1.asp<br>
<hr>
<%
dim strRECORD 'レコード内容を一時保存
dim nCNT(10) 'カウンター 変数 10個もいらないけど
dim nSUM '*1回答の合計数
nSUM = 0 '初期化する
'カウンター変数をループで初期化しておく
For i = 0 to 10
nCNT(i) = 0
Next
'FileSystemObjectを生成します、、って英文、そのままジャン。
Set objFS = Server.CreateObject("Scripting.FileSystemObject")
'test013.txt 結果ファイルを読取専用モードで開く
Set ts = objFS.OpenTextFile(Server.MapPath("test013.txt"), 1, True)
Do While ts.AtEndOfStream = False 'ファイルの終端になってない間ループする
strRECORD = ts.ReadLine 'ファイルからデータを一行を読む
'Left関数を使って左から1文字目をCintで数値変換
i = Cint(Left(strRECORD, 1)) '読みこんだレコードの1文字目を数値変換
'nCNT(i番目)をカウントアップ
nCNT(i) = nCNT(i) + 1
'*2合計数は無条件にカウントアップ
nSUM = nSUM + 1
Loop
ts.close '使ったファイルは閉じようよ
Response.Write "アンケート回答数<b> " & nSUM & "</b>人です" '*4回答数表示
'Array関数を使用して、評価コメントを初期化
strBOX = Array("かなり不満", "不満", "少し不満", "どちらとも言えない", _
"まぁまぁ", "満足", "大変満足")
'結果の表示を<TABLE>タグを使用して表示
Response.Write "<TABLE border=1>" 'border=1で境界線(ワクを表示)
Response.Write "<TR><TD>評価</TD><TD>コメント</TD><TD>人数</TD>"
Response.Write "<TD>%</TD></TR>" '*3 %の見出しを追加
'ループで回して評価の集計データを表示する
For i = 6 To 0 Step -1 '6〜0のループを作る
Response.Write "<TR><TD>" & i & "</TD>"
Response.Write "<TD>" & strBOX(i) & "</TD>"
Response.Write "<TD>" & nCNT(i) & "</TD>"
'*5 %を計算して、表示する
Response.Write "<TD>" & (nCNT(i) / nSUM) * 100 & "%</TD></TR>"
Next
Response.Write "</TABLE>" '忘れずにテーブルを終わりにする
%>
<hr>
アンケート結果はこんな感じです。<br>
<A HREF="test013.txt" target="_new">元データtest013.txtを見る</A><br>
<br>
</body>
</html>
---
いつもの軽く解説だと、
dim nSUM '*1回答の合計数
nSUM = 0 '初期化する
で、合計数のカウンターを宣言、初期化してます。
Do While ts.AtEndOfStream = False 'ファイルの終端になってない間ループする
・
・
・
'*2合計数は無条件にカウントアップ
nSUM = nSUM + 1
Loop
ループ内で、そのままカウントしてます。
もうひとつの考え方で、回答の合計数だから、
nSUM = nCNT(0) + nCNT(1) + nCNT(2) + nCNT(3) + nCNT(4) + nCNT(5) + nCNT(6)
の力技や
For i=0 To 6
nSUM = nSUM + ncnt(i)
Next
でカウントする手もあります。お好みで。
Response.Write "アンケート回答数<b> " & nSUM & "</b>人です" '*4回答数表示
は、確認の意味も含めて、表示してます。
'ループで回して評価の集計データを表示する
For i = 6 To 0 Step -1 '6〜0のループを作る
Response.Write "<TR><TD>" & i & "</TD>"
Response.Write "<TD>" & strBOX(i) & "</TD>"
Response.Write "<TD>" & nCNT(i) & "</TD>"
'*5 %を計算して、表示する
Response.Write "<TD>" & (nCNT(i) / nSUM) * 100 & "%</TD></TR>"
Next
人数÷合計数×100で%を計算し、出力してます。
終了ですね。今日は軽かったですね。では、また。
オイ、三流プログラマー
何?
表示を見たのかよ。
http://www.ken3.org/cgi-bin/test/test015-1.asp
を実行すると、
アンケート回答数 16人です
評価 コメント 人数 %
6 大変満足 1 6.25%
5 満足 2 12.5%
4 まぁまぁ 1 6.25%
3 どちらとも言えない 4 25%
2 少し不満 3 18.75%
1 不満 3 18.75%
0 かなり不満 2 12.5%
と表示されるよ。
気になるのが(見た目でNGなのは)、
6.25% 12.5% 25%
と小数点以下の桁数がそろってないよ。
それと、データは右詰になっていて、
数値は左詰のほうがいいのでは?
人数が10だったら、
1
10
と表示じゃマズイでしょ。
/*
* 3.FormatNumber関数 と <TD ALIGN=Right>
*/
う〜ん、何かないかなぁ。
第一の問題点は小数点以下の桁数問題かぁ、
関数を探すと、
FormatNumber関数ってのが使えそうです。
使い方は
moji = FormatNumber(値,小数点以下の桁数)
で、調整した文字列を返してくれます。
次は右詰かぁ、
えっと、表作りの<TD>タグにALIGNってあるから、
これをRightにするか。
-- test015-2.asp
<%@LANGUAGE=VBScript%>
<html>
<head>
<title>FormatNumber関数 と <TD ALIGN=Right></title>
</head>
<body>
<h2>FormatNumber関数 と <TD ALIGN=Right></h2>
test015-2.asp<br>
<hr>
<%
dim strRECORD 'レコード内容を一時保存
dim nCNT(10) 'カウンター 変数 10個もいらないけど
dim nSUM '*1回答の合計数
nSUM = 0 '初期化する
'カウンター変数をループで初期化しておく
For i = 0 to 10
nCNT(i) = 0
Next
'FileSystemObjectを生成します、、って英文、そのままジャン。
Set objFS = Server.CreateObject("Scripting.FileSystemObject")
'test013.txt 結果ファイルを読取専用モードで開く
Set ts = objFS.OpenTextFile(Server.MapPath("test013.txt"), 1, True)
Do While ts.AtEndOfStream = False 'ファイルの終端になってない間ループする
strRECORD = ts.ReadLine 'ファイルからデータを一行を読む
'Left関数を使って左から1文字目をCintで数値変換
i = Cint(Left(strRECORD, 1)) '読みこんだレコードの1文字目を数値変換
'nCNT(i番目)をカウントアップ
nCNT(i) = nCNT(i) + 1
'*2合計数は無条件にカウントアップ
nSUM = nSUM + 1
Loop
ts.close '使ったファイルは閉じようよ
Response.Write "アンケート回答数<b> " & nSUM & "</b>人です" '*4回答数表示
'Array関数を使用して、評価コメントを初期化
strBOX = Array("かなり不満", "不満", "少し不満", "どちらとも言えない", _
"まぁまぁ", "満足", "大変満足")
'結果の表示を<TABLE>タグを使用して表示
Response.Write "<TABLE border=1>" 'border=1で境界線(ワクを表示)
Response.Write "<TR><TD>評価</TD><TD>コメント</TD><TD>人数</TD>"
Response.Write "<TD>%</TD></TR>" '*3 %の見出しを追加
'ループで回して評価の集計データを表示する
For i = 6 To 0 Step -1 '6〜0のループを作る
Response.Write "<TR><TD>" & i & "</TD>"
Response.Write "<TD>" & strBOX(i) & "</TD>"
Response.Write "<TD ALIGN=RIGHT>" & nCNT(i) & "</TD>" '*7ALIGN=RIGHT追加
'*5 %を計算して、表示する
strMSG = FormatNumber((nCNT(i) / nSUM) * 100, 1) '*6計算と変換処理
Response.Write "<TD ALIGN=RIGHT>" & strMSG & "%</TD></TR>"
Next
Response.Write "</TABLE>" '忘れずにテーブルを終わりにする
%>
<hr>
アンケート結果はこんな感じです。<br>
<A HREF="test013.txt" target="_new">元データtest013.txtを見る</A><br>
<br>
</body>
</html>
---
ポイントは、得に無く、
'ループで回して評価の集計データを表示する
For i = 6 To 0 Step -1 '6〜0のループを作る
Response.Write "<TR><TD>" & i & "</TD>"
Response.Write "<TD>" & strBOX(i) & "</TD>"
Response.Write "<TD ALIGN=RIGHT>" & nCNT(i) & "</TD>" '*7ALIGN=RIGHT追加
'*5 %を計算して、表示する
strMSG = FormatNumber((nCNT(i) / nSUM) * 100, 1) '*6計算と変換処理
Response.Write "<TD ALIGN=RIGHT>" & strMSG & "%</TD></TR>"
Next
*6で、
strMSG = FormatNumber((nCNT(i) / nSUM) * 100, 1) '*6計算と変換処理
と、小数点以下を1桁にしたのと
*7で、
Response.Write "<TD ALIGN=RIGHT>" & nCNT(i) & "</TD>" '*7ALIGN=RIGHT追加
と、<TD ALIGN=RIGHT>を使ってみました。
http://www.ken3.org/cgi-bin/test/test015-2.asp
を実行すると、無事にできたみたいです。
/*
* 4.まだまだ、メイクが上手じゃないよね
*/
ここ2・3回は、出力ばかり気にしてるけど、
なかなか、上達しないよね。
プログラムもセンスでるけど、
HTMLで結果を表示して、ユーザーに見せるのもセンスが必要ですね。
ASPのテクだけじゃなく、
HTMLの見せ方も平行して覚えないと、
本当にいいページはできないと感じる今日この頃。
/*
* 5.終わりの挨拶
*/
今回は、
・アンケートには%の項目あるよね
・FormatNumber関数を使って小数点以下の調整
・<TD ALIGN=Right>で右詰の表示
でした。
結果の見せ方も、いろいろな書き方あるので、
人を振り向かせる、夢中にさせるページをみなさんは目指してくださいね。
最強ページへの道のりは遠いなぁ〜。
またね(笑)
何か質問・感想があったら、気軽に、
メール、掲示板に書き込んでくださいね。
三流プログラマーのKen3でした。
ページフッター
ここまで、読んでいただきどうもです。目的の情報が見つかったか?少々心配しつつ、、、
三流君へ メッセージを送る
感想や質問・要望・苦情など 三流君へメッセージを送る。

下記のフォームからメッセージを送ることができます。
[三流君(TOP ken3.org へ戻る)]
/ [ASPで遊ぶ、失敗する]
/ [ASP記事 バックナンバー目次]
まぁ、基本はデータの受け取りかなぁ。
・[Form等を使用したデータのやり取り]・・・ASPと言っても、HTMLの入力フォームからデータを受け取ります。POSTやGETでやりとりを押さえますか。
次は、データの入出力 で ADOを使った(ADOで接続) と SQLの解説を少々
・[ADOでMdbファイルを使う]・・・MDBと接続して、簡単な追加・更新・削除を行った。
・[ADOでExcelと接続してみた]・・・.xlsと接続してSQLを使ってみた。
・[ADOでCSVと接続してみた]・・・.CSV テキストを読み出した。※更新・削除はできません
広告:
DBが使えるので、あまり使用しないけど、普通のテキストファイル処理
・[テキストファイル処理]・・・ファイルを開いて、書き込む。1行読み込みなどを軽く
VBScriptでFormat関数が無いなど、微妙にVBAと違うけど
[VBScript関数関係の説明]・・・少し、処理を書いてみた。
[その他処理サンプル]・・・あまり良いサンプル作れなかったけど。。。
何かの参考となれば幸いです。
[三流君(TOP ken3.org へ戻る)]
/ [ASPで遊ぶ、失敗する]
/ [ASP記事 バックナンバー目次]