go浮点数转字符串保留小数点后N位的完美解决方法

最近在项目中碰到很多次float转string,同时要求保留小数点后几位,并且去掉小数点后0的场景

虽然问题很简单,但是隔了挺久没处理这种场景就有些生疏了,自己也搜了一下,很多回答都不太满意。这里贴一下自己的做法,如果有更好的解决办法的话,还请多多指教

// 主要逻辑就是先乘,trunc之后再除回去,就达到了保留N位小数的效果
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)
}

其他的一些常用的格式化浮点数的demo

// 2代表精度,这种方式会有小数点后无效的0的情况
 strconv.FormatFloat(123.123 'f', 2, 64)
 // 效果同上
 fmt.Sprintf("%.2f", 123.123)
 // g可以去掉小数点后无效的0
 fmt.Sprintf("%g", 123.00)
 // 效果同上,可以去掉0,但是达不到保留指定位数的效果
 strconv.FormatFloat(a, 'g', -1, 64)

上面这些例子其实灵活运用一下也可以达到最开始的效果

ps:下面看下golang 浮点数保留n位小数

程序员的天敌产品同学,就像UI妹子的甲方爸爸,总会提些你不想写的需求,还不能动手,比如某个数值经过 ÎÒ´òµÄ¾ÍÊÇÂÒÂë ,先保留3位小数,再经过%¥#@%&*%¥#%,再保留2位小数,在经过䅂䌱㈳ꃥꖽ�,取整。。。。。

故,有了下面的n位取整

func ChangeNumber(f float64, m int) string {
n := strconv.FormatFloat(f, ‘f', -1, 32)
if n == “” {
return “”
}
if m >= len(n) {
return n
}。
newn := strings.Split(n, “.”)
if len(newn) < 2 || m >= len(newn[1]) {
return n
}
return newn[0] + “.” + newn[1][:m]
}

为啥返回字符串类型??因为浮点数再进行各种各样的计算之后,很可能精度丢失,其中一个方法就是进行一次运算之后转化成字符串类型,然后由字符串类型转化成float类型,再进行接下来的运算,稳稳的✧(≖ ◡ ≖✿)

总结

到此这篇关于go浮点数转字符串保留小数点后N位的完美解决方法的文章就介绍到这了,更多相关go浮点数转字符串内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Golang 中整数转字符串的方法

    整形转字符串经常会用到,本文讨论一下 Golang 提供的这几种方法.基于 go1.10.1 fmt.Sprintf fmt 包应该是最常见的了,从刚开始学习 Golang 就接触到了,写 'hello, world' 就得用它.它还支持格式化变量转为字符串. func Sprintf(format string, a ...interface{}) string Sprintf formats according to a format specifier and returns the re

  • Golang实现字符串倒序的几种解决方案

    前言 本文主要给大家介绍了关于Golang实现字符串倒序的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍: 字符串倒置如下: Hello World --> dlroW olleH 解决方案1: length := len(str) array := make([]string , length) for i , v := range str{ array[i] = string(v) } for i := 0 ; i < length/2 ; i++ { array[

  • go浮点数转字符串保留小数点后N位的完美解决方法

    最近在项目中碰到很多次float转string,同时要求保留小数点后几位,并且去掉小数点后0的场景 虽然问题很简单,但是隔了挺久没处理这种场景就有些生疏了,自己也搜了一下,很多回答都不太满意.这里贴一下自己的做法,如果有更好的解决办法的话,还请多多指教 // 主要逻辑就是先乘,trunc之后再除回去,就达到了保留N位小数的效果 func FormatFloat(num float64, decimal int) string { // 默认乘1 d := float64(1) if decima

  • 实现js保留小数点后N位的代码

    在JS中,一般实现保留小数点后N位的话,都是利用toFixed函数 复制代码 代码如下: <script language="javascript"> document.write("<h1>JS保留两位小数例子</h1><br>"); var a=2.1512131231231321; document.write("原来的值:"+a+"<br>"); docume

  • 调整小数的格式保留小数点后两位

    在开发过程中经常遇到要调整小数的格式,如保留小数点后两位等等.方法也颇为常见,备忘如下. 第一种,利用math.round var original=28.453 1) //round "original" to two decimals var result=Math.round(original*100)/100; //returns 28.45 2) // round "original" to 1 decimal var result=Math.round(

  • js保留小数点后几位的写法

    如下所示: 复制代码 代码如下: //保留小数点后2位function disposeNumber(value){    if(value == null || value == ""){        return 0;    }else if(value.toString().indexOf(".") == -1){        return value;    }else{        return round(value, 2);    }} funct

  • C++详解使用floor&ceil&round实现保留小数点后两位

    目录 C++四舍五入保留小数点后两位 1.floor函数 2.ceil函数 3.round函数 C++四舍五入保留小数点后两位 示例 #include <iostream> using namespace std; int main() { double i = 2.235687; double j = round(i * 100) / 100; cout << "The original number is " << i << endl

  • mysql格式化小数保留小数点后两位(小数点格式化)

    复制代码 代码如下: SELECT FORMAT(12562.6655,2); 结果:12,562.67 查看文档:Formats the number X to a format like '#,###,###.##', rounded to D decimal places, and returns the result as a string. If D is 0, the result has no decimal point or fractional part.整数部分超过三位的时候

  • Python如何保留float类型小数点后3位

    目录 保留float类型小数点后3位 float 一.round() 二.'%.3f'%x 三.decimal 小数点后的位数 第一种方法 第二种方法 第三种方法 保留float类型小数点后3位 float 查询持仓数据,数字货币交易所一般给出的是float类型,且小数点十几位,为了展示便捷,只保留小数点后3位. float数据类型,保留小数点的方式有三种 一.round() >> x = 3.897654326 >> round(x, 3) 3.898 >> x =

  • c++只保留float型的小数点后两位问题

    目录 c++ 只保留float型的小数点后两位 C++ cout输出小数点后指定位数 参考代码 c++ 只保留float型的小数点后两位 float spd = 22.518744; char buf[10]; sprintf(buf, "%.2f", spd); sscanf(buf, "%f", &spd); 记录一下,有时候我们需要float类型只保留两个有效小数,但是在实际应用中会发现一些现象 如:1.5 在实际中为1.49999998 等等 还有一

  • Android金额输入框只允许输入小数点后两位效果

    一:要实现这个效果也不是很复杂,只需要设置输入框输入的字符类型.设置InputFilter.设置输入变化监听即可.下面直接来看代码吧-. 二:new 一个class extends AppCompatEditText并写上一个初始化函数 private void init() { //设置输入框允许输入的类型(正则) //对应的布局属性是--->android:digits="0123456789." setKeyListener(DigitsKeyListener.getIns

  • JavaScript实现计算圆周率到小数点后100位的方法示例

    本文实例讲述了JavaScript实现计算圆周率到小数点后100位的方法.分享给大家供大家参考,具体如下: 浮点数的有效数位是16位,我自己做了一个大数类,能存储100位有效数位,并实现了大数类的基本运算.我用它来计算圆周率(割圆法,即多边形逼近),得到了小数点后一百位有效数字,比对了Machin 公式的计算结果,没有误差.用时约2秒. 完整示例如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8&

随机推荐