You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

78 lines
1.8 KiB

2 years ago
package xmath
import (
"fmt"
//"github.com/shopspring/decimal"
"math"
"math/rand"
"strconv"
"strings"
)
// 小数点后 n 位 - 四舍五入
func RoundedFixed(val float64, n int) float64 {
shift := math.Pow(10, float64(n))
fv := 0.0000000001 + val //对浮点数产生.xxx999999999 计算不准进行处理
return math.Floor(fv*shift+.5) / shift
}
// 小数点后 n 位 - 舍去
func TruncRound(val float64, n int) float64 {
floatStr := fmt.Sprintf("%."+strconv.Itoa(n+1)+"f", val)
temp := strings.Split(floatStr, ".")
var newFloat string
if len(temp) < 2 || n >= len(temp[1]) {
newFloat = floatStr
} else {
newFloat = temp[0] + "." + temp[1][:n]
}
inst, _ := strconv.ParseFloat(newFloat, 64)
return inst
}
// RandInt64 随机范围取值
func RandInt64(min, max int64) int64 {
if min >= max || min == 0 || max == 0 {
return max
}
return rand.Int63n(max-min) + min
}
func FloatWithoutRightDot(n float64) string {
s := fmt.Sprintf("%.2f", n)
ss := strings.Split(s, ".")
ss1 := strings.TrimRight(ss[1], "0")
if ss1 == "" {
return ss[0]
} else {
return fmt.Sprintf("%s.%s", ss[0], ss1)
}
}
func NumberFormat(str string) string {
length := len(str)
if length < 4 {
return str
}
arr := strings.Split(str, ".") //用小数点符号分割字符串,为数组接收
length1 := len(arr[0])
if length1 < 4 {
return str
}
count := (length1 - 1) / 3
for i := 0; i < count; i++ {
arr[0] = arr[0][:length1-(i+1)*3] + "," + arr[0][length1-(i+1)*3:]
}
return strings.Join(arr, ".") //将一系列字符串连接为一个字符串,之间用sep来分隔。
}
func ConvertInt64(s string) int64 {
v, _ := strconv.ParseInt(s, 10, 64)
return v
}
//
//func Round(f float64, n int32) float64 {
// v, _ := decimal.NewFromFloat(f).Round(n).Float64()
// return v
//}