专栏首页Go实战Golang浮点型的默认舍入规则——四舍六入五成双

Golang浮点型的默认舍入规则——四舍六入五成双

四舍六入五成双是一种比较精确比较科学的计数保留法,是一种数字修约规则,又名银行家舍入法。它比通常用的四舍五入法更加精确。

具体规则:

  1. 被修约的数字小于5时,该数字舍去;
  2. 被修约的数字大于5时,则进位;
  3. 被修约的数字等于5时,要看5前面的数字,若是奇数则进位,若是偶数则将5舍掉,即修约后末尾数字都成为偶数;若5的后面还有不为“0”的任何数,则此时无论5的前面是奇数还是偶数,均应进位。

助记口诀:

四舍六入五考虑,五后非零就进一,五后为零看奇偶,五前为偶应舍去,五前为奇要进一

Golang中浮点型默认使用银行家舍入法,如下使用代码验证示例

import (
	"fmt"
)

func main() {
	fmt.Printf("9.8249	=>	%0.2f(四舍)\n", 9.8249)
	fmt.Printf("9.82671	=>	%0.2f(六入)\n", 9.82671)
	fmt.Printf("9.8351	=>	%0.2f(五后非零就进一)\n", 9.8351)
	fmt.Printf("9.82501	=>	%0.2f(五后非零就进一)\n", 9.82501)
	fmt.Printf("9.8250	=>	%0.2f(五后为零看奇偶,五前为偶应舍去)\n", 9.8250)
	fmt.Printf("9.8350	=>	%0.2f(五后为零看奇偶,五前为奇要进一)\n", 9.8350)
}

输出结果 

  9.8249  =>  9.82(四舍)
  9.82671 =>  9.83(六入)
  9.8351  =>  9.84(五后非零就进一)
  9.82501 =>  9.83(五后非零就进一)
  9.8250  =>  9.82(五后为零看奇偶,五前为偶应舍去)
  9.8350  =>  9.84(五后为零看奇偶,五前为奇要进一)

因此,我可以方便得使用fmt的方法对浮点型进行银行家取舍,取得其近似数。例如:

import (
	"fmt"
	"strconv"
)

func main() {
	s := fmt.Sprintf("%0.6f", 17.82671567890123456789987654324567898765432)
	f, _ := strconv.ParseFloat(s, 64)
	fmt.Println(s, f)
}

输出结果

  17.826716 17.826716

须知:Golang中浮点数精确到超过14位小数后,该舍入规则将不准确,原因是golang的浮点型最大精确到小数点后15位!

(adsbygoogle = window.adsbygoogle || []).push({});

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 使用git-flow来帮助管理git代码 转

    对git不熟悉的我,经常把git提交搞得很乱,导致在master上有许多无用的commit,最终决定好好地看一下git的使用教程,却不小心发现了还有一个git-...

    henrylee2cn
  • Golang中defer、return、返回值之间执行顺序的坑

    Go语言中延迟函数defer充当着 try...catch 的重任,使用起来也非常简便,然而在实际应用中,很多gopher并没有真正搞明白defer、retur...

    henrylee2cn
  • Golang 平滑关闭/重启与热编译技术 原

    本文所讨论的平滑关闭是指,HTTP服务、RPC服务、Socket长服务等各种网络服务的平滑关闭。

    henrylee2cn
  • 如何对客户价值进行精准预测和分析?

    作者 CDA 数据分析师 在多数企业运营中,20%的客户占80%的销售额,20%的客户给我们提供了80%的利润。这20%的客户是我们的重要客户,是我们利润...

    CDA数据分析师
  • 【案例】恒丰银行——基于大数据的精准营销模型应用

    数据猿导读 恒丰银行探索的精准营销系统打通银行内外部数据,并利用人工智能技术,对数据进行深度挖掘,打造个性化理财推荐系统,预测客户需求和价值,实现细分客群精准触...

    数据猿
  • CRM WebClient UI里标准configuration和custom configuration区别

    猜想: q system上创建的configuration 一定是customer configuration。

    Jerry Wang
  • 如何给产品经理解释什么是 RSA 加密(一)

    我们之前两篇文章已经介绍了如何在 Python 下面使用 RSA 加密,以及 python-rsa 这个库如何寻找两个大质数。

    青南
  • TW洞见 | 看板与利特尔法则

    利特尔法则(Little’s Law)作为一个非常朴素的原理,为看板方法奠定了一个理论基础,看似简单的公式背后却有其复杂的一面。 一、利特尔法则 利特尔法则的公...

    ThoughtWorks
  • R语言 基本统计分析

    “ 本章节是数据预处理的第一步:了解数据(集)。只有充分了解了数据,我们才能对数据做进一步的预处理和后续深入的分析。”

    拴小林
  • 如何修改帝国cms文章点击量默认值和成倍增加

      我们在帝国cms发布完文章,在不点击的情况下,“点击量”默认显示为0,请问有什么方法,修改关注默认值吗?这个可以在增加信息时,“特殊属性”标签里修改点击量,...

    ytkah

扫码关注云+社区

领取腾讯云代金券