回 帖 发 新 帖 刷新版面

主题:请教高手一个QBASIC中整数保留小数点的问题

我编了一个求坐标程序,最后结果输出为X_Y_(_部分为算出的数值)现在结果能出来,比X100Y100,但是,我想改成X100.000Y100.00这样的,哪位高手帮我看一下

代码如下:

INPUT "角度"; A
INPUT "个数"; B
INPUT "直径"; C
CLS
OPEN "F" FOR OUTPUT AS #1
PRINT #1, "角度"; A, ; "个数"; B, ; "直径"; C
PRINT "角度"; A
PRINT "个数"; B
PRINT "直径"; C
CONST PI = 3.14159265358979#
H = 1
WHILE H <= B
D = A + (H - 1) * 360 / B
X = C / 2 * COS((D / 180) * PI)
Y = C / 2 * SIN((D / 180) * PI)
H = H + 1
X = INT(X * 1000 + .5) / 1000
Y = INT(Y * 1000 + .5) / 1000
M$ = LTRIM$(STR$(X))
N$ = LTRIM$(STR$(Y))
M1$ = RTRIM$(M$)
N1$ = RTRIM$(N$)
PRINT "X"; M1$; "Y"; N1$
PRINT #1, "X"; M1$, "Y"; N1$
WEND
CLOSE #1

回复列表 (共4个回复)

沙发

INPUT "角度"; A
INPUT "个数"; B
INPUT "直径"; C
CLS
OPEN "F" FOR OUTPUT AS #1
PRINT #1, "角度"; A, ; "个数"; B, ; "直径"; C
PRINT "角度"; A
PRINT "个数"; B
PRINT "直径"; C
CONST PI = 3.14159265358979#
H = 1
WHILE H <= B
D = A + (H - 1) * 360 / B
X = C / 2 * COS((D / 180) * PI)
Y = C / 2 * SIN((D / 180) * PI)
H = H + 1
X = INT(X * 1000 + .5) / 1000
Y = INT(Y * 1000 + .5) / 1000
M$ = LTRIM$(STR$(X))
N$ = LTRIM$(STR$(Y))
'-----------------不用去右空
'M1$ = RTRIM$(M$)
'N1$ = RTRIM$(N$)
'-----------------转换为保留小数位形式
IF INSTR(1,M$,".")=0 THEN
        M$=M$+".000"      'X坐标是要保留三位吗?
   ELSE
        M$=M$+STRING$(3-LEN(M$)+INSTR(1,M$,"."),"0")
END IF
IF INSTR(1,N$,".")=0 THEN
        N$=N$+".00"       'Y坐标是要保留两位吗?
   ELSE
        N$=N$+STRING$(2-LEN(N$)+INSTR(1,N$,"."),"0")
END IF
'----------------转换为正数前保留空格,以对齐小数点(此为奉送)
M$=STRING$((LEFT$(M$,1)="-")+1," ")+M$  '用STRING$是方便你修改空格为+号
N$=STRING$((LEFT$(N$,1)="-")+1," ")+N$  '如果确定用空格可用SPACE$会更方便
'----------------修改输出变量为M$ N$
PRINT "X"; M$; "Y"; N$
PRINT #1, "X"; M$, "Y"; N$
WEND
CLOSE #1

板凳

x = 100: y = 200
PRINT USING "x=###.### y=###.##"; x; y

显示为
x=100.000 y=200.00

3 楼

1.  在QB里没有去空格函数,但可以合用 rtrim$(ltrim$( a$ ))
2.  看你的程序,只是把格式用在显示和文件上,用using比较方便省力
3.  我做过一个小数点对齐的函数,在你这个程序里是用不上的,
    我当初是用在一些转换和字符处理方面上的。

function numchr$(n,a,b)
s$=ltrim$(rtrim$(str$(n)))
if asc(s$)=45 then
   f$="-"
   s$=mid$(s$,2)
endif
d=instr(s$,".")
l=len(s$)
if d<1 then
   if l<=a then
      n$=space$(a-l)+s$+"."+string$(b,"0")
   elseif l<=a+b+1 then
      n$=s$+"."+string$(a+b-l,"0")
   else
      n$=string$(a+b+1,"#")
   endif
elseif d=1 then
   n$=space$(a-1)+"0"+left$(s$,b+1)   '没有四舍五入
else
   s$=s$+string$(a+b+1,"0")
   if d<=a+1 then
      n$=space$(a+1-d)+left$(s$,b+d)
   else
      n$=left$(s$,a+b+1)
   endif
endif
if f$="-" then
  for i=1 to len(n$)
    if mid$(n$,i,1)<>32 then exit for
  next
  if i=1 then
     n$="-"+left$(n$,len(n$)-1)
  else
     mid$(n$,i-1,1)="-"
  endif
endif
numchr$=n$
end function

4 楼

多谢两位大哥的帮助,我只是初学者,上面的程序是我想用来算如下图所示的各孔X
Y坐标,并自动输出数控加工程序
http://photo.163.com/openpic.php?user=assasd&pid=578918083&_dir=%2F23012818

数控加工程序格式为
X50.0Y0
X35.355Y35.355
X0Y50.001
X-35.355Y35.355
X-50.0Y0
X-35.355Y-35.355
X0Y-50.0
X35.355Y-35.355

整数要有小数点,保留三位小数,中间不能有空格

我来回复

您尚未登录,请登录后再回复。点此登录或注册