//
/* ----------------------------------------------------------------------------------------------
fixed-point.java 固定小数点数 ver. 1.00 (JDK 1.02)
ueyama@infonet.co.jp 2005.03.10
---------------------------------------------------------------------------------------------- */
import java.applet.Applet;
import java.awt.*;
public class fixed_point extends Applet
{
int Bin[] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
int B0 = 8; // 小数点の位置
double Dc = 0.0; // 10進数
double Itg = 0.0; // 整数部
double Dcm = 0.0; // 小数部
String Sb = ""; // 整数部文字列
Image Img;
Graphics gr;
public void init()
{
String bg=getParameter("BgColor");
int bgc=Integer.valueOf(bg,16).intValue();
setBackground(new Color(bgc));
MediaTracker mt=new MediaTracker(this);
Img=getImage(getCodeBase(), getParameter("figure"));
mt.addImage(Img, 0);
try
{
mt.waitForID(0);
}
catch(InterruptedException e){};
gr=getGraphics();
}
public boolean inside(int x, int a, int b)
{
return (x<=Math.max(a,b) && x>=Math.min(a,b)) ? true:false;
}
public void dsp_g(int x, int y, int n, int c)
{
Graphics gx=gr.create();
int w=0, h=0, ox=0, oy=0;
switch(n)
{
case 0: w= 20; h=32; ox= 0; oy= 0; break; // 0, 1
case 1: w= 7; h=32; ox= 40; oy= 0; break; // 小数点
case 7: w= 16; h=24; ox= 0; oy= 32; break; // 10進数 数字
case 5: w= 26; h=23; ox= 56; oy= 0; break; // クリアボタン
}
gx.clipRect(x,y,w,h);
gx.drawImage(Img,x-(ox+c*w),y-oy,this);
gx.dispose();
}
public void dsp_bin()
{
int i;
gr.clearRect(0, 0, 608, 32);
for(i=0; i<16; i++)
{
dsp_g((15-i)*38, 0, 0, Bin[i]); // 2進数の表示
dsp_g((15-i)*38+25, 0, 1, (i==B0)?0:1); // 小数点の表示
}
}
public void cal_dec() // 10進数への変換 & 表示
{
int i,m=0,n=0;
Dc=0.0;
Graphics gx=gr.create();
gx.clearRect(123,51,350,19);
for(i=0; i<16; i++) Dc += Bin[i] * Math.pow(2, i-B0); // 10進数に変換
Itg=Math.floor(Dc); // 整数部
Dcm=(Dc-Itg); // 小数部
Sb=Double.toString(Itg); // 整数部を文字列にする
n=Sb.length();
Sb=Sb.substring(0, n-2); // 文字列末尾の ".0" を削除する
if(Dcm>0) // 小数部を文字列に加える
{
Sb+=".";
for(i=0; i<15; i++)
{
Dcm*=10;
n=(int)(Math.floor(Dcm));
Sb+=Integer.toString(n);
Dcm-=(double)n;
}
while(Sb.endsWith("0")) // 文字列末尾の "0" を削除する
{
n=Sb.length();
Sb=Sb.substring(0, n-1);
}
}
gr.clearRect(176, 56, 336, 24);
for(i=0; i20) B0=15-x/38; // 小数点をクリック
dsp_bin();
}
if(inside(x, 636, 662) && inside(y, 6, 29) && Dc>0.0) // クリアボタン
{
dsp_g(636, 6, 5, 1);
for(i=0; i<16; i++) Bin[i]=0;
dsp_bin();
}
cal_dec();
return true;
}
public boolean mouseUp(Event e, int x, int y)
{
if(inside(x, 636, 662) && inside(y, 6, 29)) dsp_g(636, 6, 5, (Dc==0)?2:0); // クリアボタン
return true;
}
}
// 戻る