package utils

import (
	"math"
	"math/big"
	"sort"
	"strconv"
)

// FormatFloat 保留指定小数位并返回字符串
func FormatFloat(num float64, decimal int) string {
	// 默认乘1
	d := float64(1)
	if decimal > 0 {
		// 10的N次方
		d = math.Pow10(decimal)
	}
	// math.trunc作用就是返回浮点数的整数部分
	// 再除回去，小数点后无效的0也就不存在了
	return strconv.FormatFloat(math.Trunc(num*d)/d, 'f', -1, 64)
}

// SortInIntSlice 判断int是否包含于数组中
func SortInIntSlice(haystack []int, needle int) bool {
	sort.Ints(haystack)

	index := sort.SearchInts(haystack, needle)
	return index < len(haystack) && haystack[index] == needle
}

// IntToFloat64 IntToFloat64 高精度转
func IntToFloat64(value int, decimal int) float64 {
	if value == 0 {
		return 0
	}

	numrator, _ := new(big.Float).SetPrec(uint(1024)).SetString(strconv.Itoa(value))

	denominator := big.NewFloat(math.Pow10(decimal))
	denominator1 := numrator.Quo(numrator, denominator)
	rst, _ := denominator1.Float64()

	return rst
}
