我有一个从互联网上下载的程序,需要从三位数字打印出每个数字。例如:
输入:123
预期产出:
1
2
3
我有598
需要获得:
5
9
8
我尝试使用这个公式,但问题是当数字带小数函数失败时:
FIRST_DIGIT = (number mod 1000) / 100
SECOND_DIGIT = (number mod 100) / 10
THIRD_DIGIT = (number mod 10)
其中number是上面的例子,所以这里是calulation:
FIRST_DIGIT =(598 mod 1000)/ 100 = 5,98< ==失败...我需要得到5但我的程序显示0因为我有小数点
SECOND_DIGIT =(598 mod 100)/ 10 = 9,8< ==失败...我需要得到9但我的程序显示0因为我有小数点
THIRD_DIGIT =(598 mod 10)= 8< == CORRECT ...我从程序输出编号8得到,这个数字是正确的。
所以我的问题是是否有样本或更高效的代码从没有小数点的数字中获取每个数字?我不想使用舍入来舍入最接近的数字,因为如果数字大于.5,则填充失败。
由于
答案 0 :(得分:2)
我不是Basic的专家,但看起来你必须将浮点数转换为Integer。快速谷歌搜索告诉我,你必须使用Int(floating_point_number)
将浮点数转换为整数。
所以
Int((number mod 100)/ 10)
应该是你正在寻找的那个。
答案 1 :(得分:2)
最简单的解决方案是使用整数除法(\)而不是浮点除法(/)。
如果用反斜杠(\)而不是正斜杠(/)替换每个示例,它们将返回整数值。
FIRST_DIGIT = (598 mod 1000) \ 100 = 5
SECOND_DIGIT = (598 mod 100) \ 10 = 9
THIRD_DIGIT = (598 mod 10) = 8
答案 2 :(得分:1)
只要您将其从字符串中拉出来,就不必进行任何花哨的整数计算:
INPUT X
X$ = STR$(X)
FOR Z = 1 TO LEN(X$)
PRINT MID$(X$, Z, 1)
NEXT
然后,例如,您可以对每个字符串元素执行操作:
INPUT X
X$ = STR$(X)
FOR Z = 1 TO LEN(X$)
Q = VAL(MID$(X$, Z, 1))
N = N + 1
PRINT "Digit"; N; " equals"; Q
NEXT
此外,您可以按字符撕开字符串字符:
INPUT X
X$ = STR$(X)
FOR Z = 1 TO LEN(X$)
SELECT CASE MID$(X$, Z, 1)
CASE " ", ".", "+", "-", "E", "D"
' special char
CASE ELSE
Q = VAL(MID$(X$, Z, 1))
N = N + 1
PRINT "Digit"; N; " equals"; Q
END SELECT
NEXT
答案 3 :(得分:0)
最后,可以解析所有字符串元素:
INPUT X
X$ = STR$(X)
PRINT X$
FOR Z = 1 TO LEN(X$)
SELECT CASE MID$(X$, Z, 1)
CASE " "
' nul
CASE "E", "D"
Exponent = -1
CASE "."
Decimal = -1
CASE "+"
UnaryPlus = -1
CASE "-"
UnaryNegative = -1
CASE ELSE
Q = VAL(MID$(X$, Z, 1))
N = N + 1
PRINT "Digit"; N; " equals"; Q
END SELECT
NEXT
IF Exponent THEN PRINT "There was an exponent."
IF Decimal THEN PRINT "There was a decimal."
IF UnaryPlus THEN PRINT "There was a plus sign."
IF UnaryNegative THEN PRINT "There was a negative sign."