博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
golang 浮点数 取精度的效率对比
阅读量:6235 次
发布时间:2019-06-22

本文共 1596 字,大约阅读时间需要 5 分钟。

需求

    浮点数取2位精度输出

实现

  代码

package mainimport (    "time"    "log"    "strconv"    "fmt")func main() {    threadCount := 100000    fa := 3.233667    time1 := TestFn(threadCount,fa,func(fa float64) string{        return strconv.FormatFloat(fa,'f',2,64)    })    log.Printf("FormatFloat 耗时:%.4f ms",time1)    time2 := TestFn(threadCount,fa,func(fa float64) string{        return fmt.Sprintf("%.2f",fa)    })    log.Printf("Sprintf 耗时:%.4f ms",time2)}func TestFn(count int,fa float64,fn func(fa float64) string) float64{    t1 := time.Now()    for i := 0; i < count; i++ {        fn(fa)    }    t2 := time.Now()    return t2.Sub(t1).Seconds()*1000}

 

  效率对比

    测试 100次 (即threadCount赋值100,下面同理)

    

2017/06/15 18:50:17 FormatFloat 耗时:0.0452 ms2017/06/15 18:50:17 Sprintf 耗时:0.0512 ms

  

     测试 1000次

2017/06/15 18:50:43 FormatFloat 耗时:0.3861 ms2017/06/15 18:50:43 Sprintf 耗时:0.4903 ms

 

     测试 10000次

2017/06/15 18:50:58 FormatFloat 耗时:3.9688 ms2017/06/15 18:50:58 Sprintf 耗时:5.2045 ms

 

     测试  100000次    

2017/06/15 18:51:20 FormatFloat 耗时:41.9253 ms2017/06/15 18:51:20 Sprintf 耗时:51.8639 ms

       测试  10000000次

2017/06/15 18:51:49 FormatFloat 耗时:3917.7585 ms2017/06/15 18:51:54 Sprintf 耗时:5131.5497 ms

  结论

     strconv下的FormatFloat明显快一些。fmt.Sprintf用到反射,效率不高,建议少用。    

 

注意

  golang下的浮点数存在2个问题:

  1,运算时,计算结果不准

     2,四舍五入时,用的是银行舍入法,和其他语言四舍五入的值对不上

  解决

//四舍五入 取精度func ToFixed(f float64,places int) float64{    shift := math.Pow(10, float64(places))    fv := 0.0000000001 + f        //对浮点数产生.xxx999999999 计算不准进行处理    return math.Floor(fv * shift + .5) / shift}

 

  

 

转载于:https://www.cnblogs.com/mominger/p/7019496.html

你可能感兴趣的文章
联通专线切换成移动专线问题故障解决
查看>>
Oracle11gR2 for Linux6.4 静默安装
查看>>
IO-字符流-FileReader
查看>>
再谈全局网HBase八大应用场景
查看>>
mysql数据库基本命令
查看>>
如何rename datafile name中存在乱码的数据文件
查看>>
Oracle Sun Exadata V2 ,X2-2,X2-8 主要配置对比
查看>>
制造业如何将工人师傅的隐性技能转化为显性知识?
查看>>
JXplorer 的简单使用
查看>>
__name__ == "__main__"
查看>>
编译安装nginx1.10.2最新版、php7.0.12最新版、mysql5.7.16最新版
查看>>
希尔排序(Golang)
查看>>
修改grub背景图
查看>>
netapp日志中hw_assist: hw_assist functionality is inactive.排错
查看>>
SaltStack实战之配置管理-状态间关系
查看>>
sc 与net命令的区别
查看>>
2018年区块链五大关键趋势预测:区块链与物联网结合有望突破
查看>>
delphi webservices传数据
查看>>
CentOS7离线安装docker问题解决
查看>>
moss 2007内容类型,如文档库设定新建xx菜单
查看>>