반응형
Go에서 float64를 int로 변환
Go에서 float64를 int로 어떻게 변환합니까? 나는 strconv
패키지가 문자열로 또는 문자열로 무엇이든 변환하는 데 사용할 수 있지만 문자열이 아닌 데이터 유형 간에는 사용할 수 없다는 것을 알고 있습니다. 나는 fmt.Sprintf
무엇이든 문자열로 변환 한 다음 strconv
필요한 데이터 유형 으로 변환 하는 데 사용할 수 있다는 것을 알고 있지만이 추가 변환은 약간 어색해 보입니다.이 작업을 수행하는 더 좋은 방법이 있습니까?
package main
import "fmt"
func main() {
var x float64 = 5.7
var y int = int(x)
fmt.Println(y) // outputs "5"
}
단순히 int로 캐스팅하면 float가 잘립니다. 시스템이 내부적으로 2.0을 1.9999999999로 표시하면 예상 한 것을 얻지 못할 것입니다. 다양한 printf 변환이이를 처리하고 변환 할 때 숫자를 적절하게 반올림합니다. 따라서 더 정확한 가치를 얻으려면 전환이 처음 예상했던 것보다 훨씬 더 복잡합니다.
package main
import (
"fmt"
"strconv"
)
func main() {
floats := []float64{1.9999, 2.0001, 2.0}
for _, f := range floats {
t := int(f)
s := fmt.Sprintf("%.0f", f)
if i, err := strconv.Atoi(s); err == nil {
fmt.Println(f, t, i)
} else {
fmt.Println(f, t, err)
}
}
}
Go Playground에서 코드 작성
단순히 float64에서 int로 변경하면 작동합니다.
package main
import (
"fmt"
)
func main() {
nf := []float64{-1.9999, -2.0001, -2.0, 0, 1.9999, 2.0001, 2.0}
//round
fmt.Printf("Round : ")
for _, f := range nf {
fmt.Printf("%d ", round(f))
}
fmt.Printf("\n")
//rounddown ie. math.floor
fmt.Printf("RoundD: ")
for _, f := range nf {
fmt.Printf("%d ", roundD(f))
}
fmt.Printf("\n")
//roundup ie. math.ceil
fmt.Printf("RoundU: ")
for _, f := range nf {
fmt.Printf("%d ", roundU(f))
}
fmt.Printf("\n")
}
func roundU(val float64) int {
if val > 0 { return int(val+1.0) }
return int(val)
}
func roundD(val float64) int {
if val < 0 { return int(val-1.0) }
return int(val)
}
func round(val float64) int {
if val < 0 { return int(val-0.5) }
return int(val+0.5)
}
Outputs:
Round : -2 -2 -2 0 2 2 2
RoundD: -2 -3 -3 0 1 2 2
RoundU: -1 -2 -2 0 2 3 3
Here's the code in the playground - https://play.golang.org/p/HmFfM6Grqh
you can use int() function to convert float64 type data to an integer. Similarly you can use float64()
Eg:
func check(n int) bool {
// count the number of digits
var l int = countDigit(n)
var dup int = n
var sum int = 0
// calculates the sum of digits
// raised to power
for dup > 0 {
**sum += int(math.Pow(float64(dup % 10), float64(l)))**
dup /= 10
}
return n == sum
}
참고URL : https://stackoverflow.com/questions/8022389/convert-a-float64-to-an-int-in-go
반응형
'Programming' 카테고리의 다른 글
터미널에서 열린 파일의 기본 편집기를 변경 하시겠습니까? (0) | 2020.08.26 |
---|---|
행 및 열 번호가 주어지면 셀의 내용을 가져옵니다. (0) | 2020.08.26 |
Google Play 서비스 버전을 확인하는 방법은 무엇입니까? (0) | 2020.08.26 |
문자열 조각을 단일 문자열로 결합하는 방법은 무엇입니까? (0) | 2020.08.26 |
이 상황에서 .map ()은 무엇을합니까? (0) | 2020.08.26 |