前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Golang浮点型的默认舍入规则——四舍六入五成双

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

作者头像
henrylee2cn
发布于 2019-04-04 07:19:22
发布于 2019-04-04 07:19:22
4.2K00
代码可运行
举报
文章被收录于专栏:Go实战Go实战
运行总次数:0
代码可运行

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

具体规则:

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

助记口诀:

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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)
}

输出结果 

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  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的方法对浮点型进行银行家取舍,取得其近似数。例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import (
	"fmt"
	"strconv"
)

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

输出结果

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  17.826716 17.826716

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016/09/03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
js中toFixed的bug
在js中使用toFixed时,执行的并不是严格的四舍五入,使用的是银行家舍入规则:
挥刀北上
2021/02/25
2.1K0
js中toFixed的bug
别再回答面试官,toFixed采用的是四舍五入啦!
四舍五入大家都知道,但你知道银行家舍入法么?你知道JS里的toFixed实现用的是哪种吗?
沐洒
2023/07/05
4610
别再回答面试官,toFixed采用的是四舍五入啦!
C语言函数大全--n 开头的函数
huazie
2025/05/12
1570
C语言函数大全--n 开头的函数
在Python里想要四舍五入有多麻烦?
然而让人没想到的是,一个简单的四舍五入操作,在Python里居然这么难搞,网上还一堆错误的教程。
Crossin先生
2024/03/26
1950
在Python里想要四舍五入有多麻烦?
如何在 Python 里面精确四舍五入?
花下猫语:如何精确地计算浮点数?这是计算机科学的大难题。那 Python 是如何处理浮点数的四舍五入问题的呢?今天分享的文章,对此展开了深入的剖析。
Python猫
2019/04/23
5.1K0
如何在 Python 里面精确四舍五入?
“银行家算法”大揭秘!在前端表格中利用自定义公式实现“四舍六入五成双”
银行的盈利模式是什么?三个字:信息差!从储户手中收拢资金,然后放贷出去,而所谓的“利润”就是这其中的利息差额。 在我国,人民银行规定每个季度月末的20号为银行结息日,每一年四次结息,因此每年需要非常
葡萄城控件
2022/05/12
7590
“银行家算法”大揭秘!在前端表格中利用自定义公式实现“四舍六入五成双”
toFixed 函数引起的 bug
某天,客服告诉我,有客户投诉,说账单金额数据统计不对,同时测试也反馈在IE11浏览器上又是正确的。
前端达人
2021/05/11
1.9K0
C# 四舍五入round函数使用
C#中的round函数实际上不是真正的四舍五入函数,一般的程序设计语言的round函数也都不是四舍五入函数,而是银行家舍入法函数,也就是“四舍六入五考虑,五后非零就进一,五后为零看奇偶,五前为偶应舍去,五前为奇要进一”
用户7108768
2021/11/03
7850
java实现c#的math.Round的方法(处理原理:四舍六入五考虑,五后非零就进一,五后皆零看奇偶,五前为偶应舍去,五前为奇要进一)
/** * 实现C#的math.Round的方法 * 四舍六入五考虑,五后非零就进一,五后皆零看奇偶,五前为偶应舍去,五前为奇要进一 * Math.Round(3.45, 1) 3.4 * Math.Round(3.35, 1) 3.4 * Math.Round(3.45222, 1) 3.5 * * @param d ex:89.7546897546897500 * @param i * @ret
程序员小藕
2022/01/05
7110
解决JS 计算精度问题(toFixed, Math.round, 运算表达式) !
最近在做一个ERP的项目,里面涉及到了很多的计算,尤其特别是有很多关于浮点数的计算,然后就碰到了下面的问题。
HoMeTown
2022/10/26
4.9K1
java提高篇之java的四舍五入
四舍五入是我们小学的数学问题,这个问题对于我们程序猿来说就类似于1到10的加减乘除那么简单了。在讲解之间我们先看如下一个经典的案例:
哲洛不闹
2018/09/18
1.2K0
java提高篇之java的四舍五入
python中round函数的精度保留方法---四舍六入五成双
当我们利用python进行数据计算时,通常会对浮点数保留相应的位数,这时候就会用到round函数,相信各位朋友在进行使用时会遇到各种问题,关于round函数保留精度、保留方法的问题,本文会进行详细的解释和说明。首先,先将结论告诉大家:round函数采用的是四舍六入五成双的计数保留方法,不是四舍五入!
用户7886150
2020/12/19
2.2K0
下次谁再这么用BigDecimal就直接开除
今日推荐文章:使用云开发平台 0 代码开发一个 AI 智能助手小程序-腾讯云开发者社区-腾讯云
半月无霜
2024/11/21
1550
系统的讲解 - PHP 浮点数高精度运算
关于 PHP 浮点数运算,特别是金融行业、电子商务订单管理、数据报表等相关业务,利用浮点数进行加减乘除时,稍不留神运算结果就会出现偏差,轻则损失几十万,重则会有信誉损失,甚至吃上官司,我们一定要引起高度重视!
新亮
2019/05/28
2.1K0
《编写高质量代码》学习笔记(1)
前言 看大神推荐的书单中入门有这么一本书,所以决定把这本书的精华(自认为很有用的点),或许是我自己现在能用到的点都提炼出来,供大家参考学习。 以下内容均出自《编写高质量代码 改善Java程序的151个建议》——秦小波 著一书。 ---- 建议1:不要在常量和变量中出现易混淆的字母 包名全小写,类名首字母全大写,常量全部大写并用下划线分隔,变量采用驼峰命名法命名等,这些都是最基本的Java编码规范,是每个Javaer都应熟知的规则,但是在变量的声明中药注意不要引入容易混淆的字母。看下面的例子,请思考以下程序
我没有三颗心脏
2018/04/26
1.4K0
python知识点100篇系列(11)-浮点数四舍五入的两种方法
JQ实验室
2024/09/25
1950
Python之谜:四舍五入round(4.5)等于4?
你好,我是zhen guo! 四舍五入4.5,应该返回结果5,但是使用Python或NumPy内置的round方法计算,结果都返回结果4 先来还原一下: In [1]: round(4.5) Out[1]: 4 In [2]: import numpy as np In [3]: np.round(4.5) Out[3]: 4.0 如果再看一个例子,四舍五入保留小数点后1位,发现它又是进位的: In [1]: round(4.15,1) Out[1]: 4.2 round背后 Python的round使用
double
2022/09/26
1.9K0
Java 三元运算符 实现 四舍五入
(四舍五入:小数点后面的第一位小于等于4,直接舍弃,大于4向前进一位再舍弃。比如:3.4四舍五入后 为3;3.5四舍五入后为4) 当涉及在Java中实现四舍五入操作时,三元运算符是一种有效且简洁的方法。本文将介绍如何使用Java的三元运算符来实现四舍五入,以下是相关内容的整理:
猫头虎
2024/04/07
2410
IEEE754标准浮点数表示与舍入
对于一个无符号二进制小数,例如101.111,如果我们要用2个字节即16位来存储它,我们可以约定用高8位存储小数点前的数字,用低8位存储小数点后的数字,这样的话它在存储空间中就是这样的:00000101.11100000。这种存储方式中小数点的位置是固定的,这称为定点数。这种存储方式有个问题那就是存储的数值是有上限的即11111111.11111111 = 2^7^+2^6^+2^5^+2^4^+2^3^+2^2^+2^1^+2^0^+2^-1^+2^-2^+2^-3^+2^-4^+2^-5^+2^-6^+2^-7^+2^-8^。如果我们要存储1111111111111111.这个数的话,用这个存储方式是无法存储的,但是实际上对于这个数来说16位的存储空间是够用的,就是说定点数存在空间浪费的缺点。
Orlion
2024/09/02
5490
IEEE754标准浮点数表示与舍入
Python 的四舍五入的两个方法
大多数情况下,我们会使用 round 来保留小数,但这并不符合我们在数学知识里的规则。
somenzz
2022/10/25
8510
推荐阅读
相关推荐
js中toFixed的bug
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验