02-数字をきれいに出力しよう

フォーマットを指定して数値を出力する方法を紹介します。

Java編

CやFortranでは、小数の表示桁数を指定できることはよく知られています。
Javaで何かを計算してそれを表示したりすることはあまりありませんが、できます!(笑)
結構知らない人も多いのでは?
java.text.DecimalFormat?クラスを使用します。

"0"は絶対に表示され、"#"は0だと表示されません。
'で囲むと、その中の文字はそのまま表示されます。
(けれど\は\\で\になるから(ややこい)'\\'としなきゃ\になりません。)
詳しく知りたい人はドキュメントを見てね。

★ソース

import java.text.DecimalFormat;

public class NumberTest{
  public static void main(String args[]){
    
    //フォーマットを定義
    //小数2桁まで
    DecimalFormat df1 = new DecimalFormat("0.00");
    //小数1桁のパーセント
    DecimalFormat df2 = new DecimalFormat("#.#%");
    //指数
    DecimalFormat df3 = new DecimalFormat("0.00E0");
    //\表示(カンマあり)
    DecimalFormat df4 = new DecimalFormat("'\\ '#,###");

    //ちっちゃい数
    double x = 1.0/6.0;
    System.out.println("1.0 / 6.0 =");
    System.out.println("        なし:"+x);
    System.out.println("      (0.00):"+df1.format(x));
    System.out.println("      (#.#%):"+df2.format(x));
    System.out.println("    (0.00E0):"+df3.format(x));
    System.out.println();

    //おっきい数
    int y = 1234*5678;
    System.out.println("1234 * 5678 =");
    System.out.println("        なし:"+y);
    System.out.println("('\\ '#,###):"+df4.format(y));
    System.out.println("    (0.00E0):"+df3.format(y));
  }
}

★実行結果

E:\Java\test>java NumberTest
1.0 / 6.0 =
       なし:0.16666666666666666
     (0.00):0.17
     (#.#%):16.7%
   (0.00E0):1.67E-1

1234 * 5678 =
       なし:7006652
('\ '#,###):\ 7,006,652
   (0.00E0):7.01E6

PHP編

そこらへんの言語をかき集めた言語(!)だけあって、
フォーマットはC系とほぼ同じものがしようできます。
カンマをつけるのは何故か別物。(Cってできないっけ?)

★ソース

<?php
	//フォーマット文字列
	$f1 = '%01.2f';	//小数2桁
	$f2 = '%.3e';	//指数
	
	//ちっちゃい数
	$x = 1.0/6.0;
	echo('1.0/6.0 = <br>');
	echo('なし : '.$x.'<br>');
	echo($f1.' : '.sprintf($f1, $x).'<br>');
	echo($f2.' : '.sprintf($f2, $x).'<br>');
	echo('<br>');
	
	//おっきい数
	$y = 1234*5678;
	echo('1234 * 5678 =<br>');
	echo('なし : '.$y.'<br>');
	echo('number_format : '.number_format($y).'<br>');
	echo($f2.' : '.sprintf($f2, $y).'<br>');
?>

★実行結果

1.0/6.0 = 
なし : 0.166666666667
%01.2f : 0.17
%.3e : 1.67e-1

1234 * 5678 =
なし : 7006652
number_format : 7,006,652
%.3e : 7.01e+6

.NET編

日付と同じくToString?で行けます。
ちゃんと読んでないけど書式文字列はほぼJavaと同じではないかと思われます。。。
MSDN ライブラリ(数値書式指定文字列)

★ソース

<html>
<script language="C#" runat="server">
private void Page_Load(object sender, System.EventArgs e){
	//ちっちゃい数
	double x = 1.0/6.0;
	Label1.Text = x.ToString();
	Label2.Text = x.ToString("0.00");
	Label3.Text = x.ToString("#.#%");
	Label4.Text = x.ToString("0.00E0");

	//おっきい数
	int y = 1234*5678;
	Label5.Text = y.ToString();
	Label6.Text = y.ToString("#,###");
	Label7.Text = y.ToString("0.00E0");
}
</script>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<title>数値フォーマット</title>
</head>
<body>
 <table border="1">
<tr><td>なし</td><td><asp:Label id="Label1" runat="server" /></td></tr>
<tr><td>0.00</td><td><asp:Label id="Label2" runat="server" /></td></tr>
<tr><td>#.#%</td><td><asp:Label id="Label3" runat="server" /></td></tr>
<tr><td>0.00E0</td><td><asp:Label id="Label4" runat="server" /></td></tr>
</table><br />
<table border="1">
<tr><td>なし</td><td><asp:Label id="Label5" runat="server" /></td></tr>
<tr><td>#,###</td><td><asp:Label id="Label6" runat="server" /></td></tr>
<tr><td>0.00E0</td><td><asp:Label id="Label7" runat="server" /></td></tr>
 </table>
</body>
</html>

★実行結果

なし0.166666666666667
0.000.17
#.#%16.7%
0.00E01.67E-1
なし7006652
#,###7,006,652
0.00E07.01E6

感想・質問等どうぞ

  • mJNjSCzOqgq? -- Keenan? 2012-01-17 (火) 23:46:09


Tag: Tips Java PHP .NET


トップ   編集 凍結解除 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2012-01-17 (火) 23:46:10 (126d)
.NET Ajax AmazonWebServices Android C# C++ CMS Cacoo DB Exam Generics Java JavaScript Local Oracle PHP Perl Photo Programming Pukiwiki Python Qt Review Ruby SQLServer Seasar Software Tips Tool VB WebService Windows WindowsMobile XHTML XML XMLMaster XSLT game pdf wkhtmltopdf