//
/* ---------------------------------------------------------------------------------------------- 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; i戻る20) 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; } } //