主题:请教高手一个QBASIC中整数保留小数点的问题
BYXBYX
[专家分:0] 发布于 2005-12-05 23:51:00
我编了一个求坐标程序,最后结果输出为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个回复)
沙发
咖啡猪 [专家分:290] 发布于 2005-12-06 02:03: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$)
'-----------------转换为保留小数位形式
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
板凳
飞鸟12 [专家分:2830] 发布于 2005-12-06 09:10:00
x = 100: y = 200
PRINT USING "x=###.### y=###.##"; x; y
显示为
x=100.000 y=200.00
3 楼
moz [专家分:37620] 发布于 2005-12-06 12:03:00
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 楼
BYXBYX [专家分:0] 发布于 2005-12-06 13:59:00
多谢两位大哥的帮助,我只是初学者,上面的程序是我想用来算如下图所示的各孔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
整数要有小数点,保留三位小数,中间不能有空格
我来回复