如何在 Basic 中获取给定数字的每个数字?
How to get each individual digit of a given number in Basic?
我从网上下载了一个程序,需要打印出一个三位数的每一位数字。例如:
输入: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)
其中数字是上面的例子所以这里是计算:
FIRST_DIGIT = (598 mod 1000) / 100 = 5,98 <== FAILED...我需要得到 5 但我的程序显示 0 因为我有小数点
SECOND_DIGIT = (598 mod 100) / 10 = 9,8 <== FAILED...我需要得到 9 但我的程序显示 0 因为我有小数点
THIRD_DIGIT = (598 mod 10) = 8 <== 正确...我从程序输出编号 8 得到,这个数字是正确的。
所以我的问题是是否有示例或更有效的代码可以从没有小数点的数字中获取每个数字?我不想使用舍入来舍入最近的数字,因为有时如果数字大于 .5,它会填充失败。
谢谢
我不是 Basic 专家,但看起来您必须将浮点数转换为整数。快速 google 搜索告诉我您必须使用 Int(floating_point_number)
将浮点数转换为整数。
所以
Int((number mod 100)/ 10)
应该就是你要找的那个。
最简单的解决方案是使用整数除法 (\) 而不是浮点数除法 (/)。
如果您将每个示例替换为反斜杠 (\) 而不是正斜杠 (/),它们将 return 整数值。
FIRST_DIGIT = (598 mod 1000) \ 100 = 5
SECOND_DIGIT = (598 mod 100) \ 10 = 9
THIRD_DIGIT = (598 mod 10) = 8
你不需要做任何花哨的整数计算,只要你把它从一个字符串中分离出来:
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
最后,所有字符串元素都可以被解析:
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."
我从网上下载了一个程序,需要打印出一个三位数的每一位数字。例如:
输入: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)
其中数字是上面的例子所以这里是计算:
FIRST_DIGIT = (598 mod 1000) / 100 = 5,98 <== FAILED...我需要得到 5 但我的程序显示 0 因为我有小数点
SECOND_DIGIT = (598 mod 100) / 10 = 9,8 <== FAILED...我需要得到 9 但我的程序显示 0 因为我有小数点
THIRD_DIGIT = (598 mod 10) = 8 <== 正确...我从程序输出编号 8 得到,这个数字是正确的。
所以我的问题是是否有示例或更有效的代码可以从没有小数点的数字中获取每个数字?我不想使用舍入来舍入最近的数字,因为有时如果数字大于 .5,它会填充失败。
谢谢
我不是 Basic 专家,但看起来您必须将浮点数转换为整数。快速 google 搜索告诉我您必须使用 Int(floating_point_number)
将浮点数转换为整数。
所以
Int((number mod 100)/ 10)
应该就是你要找的那个。
最简单的解决方案是使用整数除法 (\) 而不是浮点数除法 (/)。
如果您将每个示例替换为反斜杠 (\) 而不是正斜杠 (/),它们将 return 整数值。
FIRST_DIGIT = (598 mod 1000) \ 100 = 5
SECOND_DIGIT = (598 mod 100) \ 10 = 9
THIRD_DIGIT = (598 mod 10) = 8
你不需要做任何花哨的整数计算,只要你把它从一个字符串中分离出来:
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
最后,所有字符串元素都可以被解析:
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."