最近在项目中碰到很多次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位小数,在经过䅂䌱㈳ꃥꖽO�,取整。。。。。
故,有了下面的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浮点数转字符串内容请搜索小牛知识库以前的文章或继续浏览下面的相关文章希望大家以后多多支持小牛知识库!
我需要将浮点值表示为小数点后具有不同位置数的字符串,应该由变量设置,而不是像.2f那样硬编码。 现在我使用的是圆形方法: 此函数删除额外的数字,因此结果不再具有指定的数字数。但它不添加尾随零。 有没有更好的方法来实现这个功能?
本文向大家介绍实现js保留小数点后N位的代码,包括了实现js保留小数点后N位的代码的使用技巧和注意事项,需要的朋友参考一下 在JS中,一般实现保留小数点后N位的话,都是利用toFixed函数 四舍五入的转换函数,如下: 参数里的: v表示要转换的值 e表示要保留的位数 函数里的两个for,这个是重点了, 第一个for针对小数点右边的情况,也就是保留小数点右边多少位; 第二个for针对小数点左边的情
我有这个: 我想给这个方法传递一个浮点值,四舍五入到一个小数位,将其转换为字符串,然后返回它。目前,这对数字没有任何影响。 会更有效吗?我是C语言的新手。
在C++中如何将浮点数转换为字符串,同时指定精度&小数位数? 例如:
本文向大家介绍JS取数字小数点后两位或n位的简单方法,包括了JS取数字小数点后两位或n位的简单方法的使用技巧和注意事项,需要的朋友参考一下 在js中有时要用到取float数字的小数点后两位的情况。 以上就是小编为大家带来的JS取数字小数点后两位或n位的简单方法全部内容了,希望大家多多支持呐喊教程~
问题内容: 正如标题所说。我不认为有可能这样做,但如果可以告诉我。 这是我正在编写的bukkit(minecraft服务器)插件所必需的。我要执行一个命令:tnt [power]。电源是我想转换为浮点数的返回字符串。 谢谢 问题答案: 用于进行转换。 和之间的区别只是回报。如果需要(对象),请使用前者;如果要数字,请使用后者。