提取数字中某个位置的数字

Ser*_*nko 3 go

number := 111555
Run Code Online (Sandbox Code Playgroud)

如何获得例如前3位数字(111)和后2位数字(55)?

was*_*mup 9

尝试这个

number := 111555
fmt.Println(number % 100) // last 2 digits (55)

// first 3 digits (111)
for ; number > 999; number /= 10 {
}
fmt.Println(number) // 111
Run Code Online (Sandbox Code Playgroud)

尝试这个

number := 111555
slice := strconv.Itoa(number)    
fmt.Println(slice[:3]) // first 3 digits (111)    
fmt.Println(slice[len(slice)-2:]) // and the last 2 digits (55)
Run Code Online (Sandbox Code Playgroud)

前 3 位数字 (111):

strconv.Itoa(number)[:3]
Run Code Online (Sandbox Code Playgroud)

最后 2 位数字 (55):

number % 100
Run Code Online (Sandbox Code Playgroud)

或者:

slice := strconv.Itoa(number)
slice[len(slice)-2:]
Run Code Online (Sandbox Code Playgroud)

尝试这个

    number := 111555
    // and the last 2 digits (55)
    l2d := number % 100
    fmt.Println(l2d)

    // first 3 digits (111)
    f3d := strconv.Itoa(number)[:3]
    // i, e := strconv.Atoi(f3d)
    fmt.Println(f3d)
Run Code Online (Sandbox Code Playgroud)

另一种方法,试试这个

package main

import (
    "fmt"
    "math"
)

func main() {
    number := 111555
    // last 2 digits (55)
    l2d := number % 100
    fmt.Println(l2d)

    // first 3 digits (111)
    remainingDigits := numberOfDigits(number) - 3
    f3d := number / int(math.Pow10(remainingDigits))
    fmt.Println(f3d)
}
func numberOfDigits(n int) (digits int) {
    for ; n != 0; n /= 10 {
        digits++
    }
    return
}
Run Code Online (Sandbox Code Playgroud)

其他方式

package main

import (
    "fmt"
)

func main() {
    number := 111555
    // and the last 2 digits (55)
    l2d := number % 100
    fmt.Println(l2d)
    // first 3 digits (111)
    fmt.Println(leftDigits(number, 3))

}

func leftDigits(number, n int) int {
    digits := make([]byte, 20)
    i := -1
    for number != 0 {
        i++
        digits[i] = byte(number % 10)
        number /= 10
    }
    r := 0
    for ; n != 0; n-- {
        r = r * 10
        r += int(digits[i])
        i--
    }
    return r
}
Run Code Online (Sandbox Code Playgroud)

输出:

55
111
Run Code Online (Sandbox Code Playgroud)


Kav*_*ian 6

此函数给出特定位置的数字:

func digit(num, place int) int {
    r := num % int(math.Pow(10, float64(place)))
    return r / int(math.Pow(10, float64(place-1)))
}
Run Code Online (Sandbox Code Playgroud)

例如digit(1234567890, 2)(从右边数第二个数)给出9digit(1234567890, 6)给出5(从右边数第六个数)。


aug*_*tzf 5

通过使用简单的算法:

func d(num int) (firstThree int, lastTwo int) {
    firstThree = num / 1000
    lastTwo = num % 100
    return
}
Run Code Online (Sandbox Code Playgroud)


Cal*_*oki 1

你不能将 int 转换成 golang 中的数字切片

诀窍是你必须将其转换为字符串,进行组合,然后分别回退到 int

https://play.golang.org/p/eZn1onG7T6