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

时间:2017-10-15 09:50:56

标签: go

number := 111555

我如何获得,例如前三位数(111)和后两位数字(55)?

7 个答案:

答案 0 :(得分:4)

使用简单的算术:

func d(num int) (firstThree int, lastTwo int) {
    firstThree = num / 1000
    lastTwo = num % 100
    return
}

答案 1 :(得分:4)

此功能提供特定位置的数字:

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

例如digit(1234567890, 2)代表9digit(1234567890, 6)代表5

答案 2 :(得分:1)

你不能把它变成golang中的数字片段

诀窍是你必须把它变成字符串,做组合,然后回退到int分开

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

答案 3 :(得分:1)

尝试this

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)

前3位数字(111):

strconv.Itoa(number)[:3]

和最后2位数字(55):

number % 100

或:

slice := strconv.Itoa(number)
slice[len(slice)-2:]

尝试this

package main

import (
    "fmt"
    "strconv"
)

func main() {
    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)
}
另一种方式:

两个右(最后)数字:

l2d := number % 100

第一个(左)3个数字(111):

n := numberOfDigits(number)
remainingDigits := n - 3
f3d := number / power10(remainingDigits)

尝试this

package main

import (
    "fmt"
)

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

    // first 3 digits (111)
    n := numberOfDigits(number)
    remainingDigits := n - 3
    f3d := number / power10(remainingDigits)
    fmt.Println(f3d)
}
func numberOfDigits(number int) int {
    i := 0
    for number != 0 {
        i++
        number /= 10
    }
    return i
}
func power10(n int) int {
    f := 1
    for ; n > 0; n-- {
        f *= 10
    }
    return f
}

another way

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
}

输出:

55
111

答案 4 :(得分:1)

如果数字不是太大,有一种简单的方法。

{{1}}

答案 5 :(得分:1)

str := strconv.Itoa(111555)
fmt.Println(str[len(str)-2:]) //trailing 2 digits 
fmt.Println(str[:3]) //first 3 digits

答案 6 :(得分:1)

例如,

package main

import (
    "fmt"
    "strconv"
)

func strDigits(n, digits int) (string, int) {
    s := strconv.Itoa(n)
    if s[0] == '-' {
        s = s[1:]
    }
    if digits > len(s) {
        digits = len(s)
    }
    if digits < 0 {
        digits = 0
    }
    return s, digits
}

func firstDigits(n, digits int) string {
    s, d := strDigits(n, digits)
    return s[:d]
}

func lastDigits(n, digits int) string {
    s, d := strDigits(n, digits)
    return s[len(s)-d:]
}

func main() {
    number := 111555
    fmt.Println(firstDigits(number, 3))
    fmt.Println(lastDigits(number, 2))
}

游乐场:https://play.golang.org/p/oYwZ5HFndt

输出:

111
55