问题标签 [bankers-rounding]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
sql - 浮点数据类型不适用于银行家四舍五入——SQL Server 2008
为了提供一些背景知识,我目前正在开展一个将 Access 数据库及其代码转换为 SQL 的项目。
在此过程中,我在 SQL Server 中将Access 数据类型更改Double
为;Float
我这样做是因为这些数据类型密切相关,并且因为我的数据库执行了大量的除法和乘法运算(我听说浮点数最适合)。
转换数据库的另一个问题是,Access 使用银行家四舍五入,而 SQL 没有。我出去发现了两个 UD 银行家舍入函数,两者都没有产生应有的一致的银行家舍入结果。
在尝试对浮点数运行这些银行家舍入函数(包括减法和加法)时,我应该预料到这种不一致吗?
下面是这两个函数...
java - BigDecimal 和计算的 Java 舍入问题
我有一个由BigDecimal
数字组成的数据集。我想在报告中介绍这一点。我已设法生成具有以下格式的报告。这有点类似于会计中的试算表。但事实并非如此!表中数据的值有 4 个小数点。但在报告中应四舍五入到小数点后两位。报告也必须准确,因此使用BigDecimal
.
真正的问题是在显示总数时。四舍五入后,总数不会正确加起来。
我使用HALF_EVEN
舍入模式是因为它用于簿记,也因为这种情况也涉及财务。
我可以在四舍五入后将其相加。那么报表计算就OK了。但它不会代表数据库中的实际值(0.553 接近 0.55,但如果我在四舍五入后将其相加,结果将是 0.56,0.553 不接近 0.56)。
有没有办法克服这个问题?我环顾四周看看如何制作试算表,但我找不到任何合适的解决方案?
编辑 1
我在这样的金融系统中看到过试算表,他们是否在四舍五入后进行计算?我一直将其与试算表报告进行比较,因为该报告与一份报告相似。
编辑 2
可以对四舍五入的值进行计算吗?我了解到,不建议对舍入值进行计算,因为原始值会被丢弃。
编辑 3 基于@MarcioB、@user3679868 和@JoopEggen 决定根据四舍五入的值进行计算。差异 .047 (.56 - .553) 显然已注销(审计标准)!
arm - ARM NEON 将 f32 转换为 s32 并朝偶数方向舍入
是否有任何函数可以控制 vcvt_s32_f32 内在的舍入模式?我想对偶数使用舍入而不是向负无穷大舍入。
谢谢。
java - 使用 BigDecimal ROUND_HALF_EVEN 舍入会得到错误的输出吗?
我对使用此处ROUND_HALF_EVEN
描述的 BigDecimal 数字进行舍入时遇到问题。
我想四舍五入到小数点后 2 位:
输出:
23.87
但是数字6是偶数,所以它应该是 23.86 还是不是?
c++ - 符合 IEEE-754 的舍入到偶数
C 标准库提供 C99 中的round
、lround
和llround
系列函数。但是,这些函数不符合 IEEE-754 标准,因为它们没有按照 IEEE 的要求实现半对偶的“银行家四舍五入”。如果小数部分正好是 0.5,则半偶数舍入要求将结果舍入到最接近的偶数值。正如cppreference.com上所述,C99 标准要求从零开始一半
1-3) 计算最接近 arg 的整数值(采用浮点格式),从零开始舍入一半的情况,而不管当前舍入模式如何。
在 C 中实现舍入的常用特别方法是表达式(int)(x + 0.5f)
,尽管在严格的 IEEE-754 数学中不正确,但通常由编译器翻译成正确的cvtss2si
指令。然而,这当然不是一个可移植的假设。
如何实现一个函数,该函数将使用半偶数语义舍入任何浮点值?如果可能,该函数应该只依赖于语言和标准库语义,以便它可以对非 IEEE 浮点类型进行操作。如果这是不可能的,那么根据 IEEE-754 位表示定义的答案也是可以接受的。<limits.h>
请用或来描述任何常数<limits>
。
floating-point - 是否应该对精确的十进制输入使用 IEEE(二进制)舍入规则?
假设我1.20515
使用默认的四舍五入规则将数字舍入到 IEEE 兼容语言(C、Java 等)中的小数点后 4 位,结果将是“1.2051”,它不是偶数。
1.20515
我认为这是由于以二进制形式存储时略微偏向于这样一个事实1.2051
,因此二进制空间中甚至没有平局。
但是,如果输入1.20515
是精确的小数,这种舍入实际上是不是错误的?
编辑:
我真正想知道的是,如果我不想使用精确的十进制算术(例如 Java 的BigDecimal
),这些二进制舍入规则是否会在工作流程中引入偏差:字符串中的精确十进制(最大 6 dp)-> 解析为 IEEE double- > 使用 IEEE 规则舍入到 4 dp
编辑2:
“精确十进制”输入由 Java 使用BigDecimal
或String
直接来自数据库生成。不幸的是,格式化必须在 JavaScript 中完成,它缺乏对正确舍入的很多支持(我正在考虑实现一些)。
c# - Math.Round(1.225,2) 给出 1.23,不应该给出 1.22
AFAIK .NET 的默认轮次选项是偶数,所以Math.Round(1.225,2)
应该给出1.22但它给出1.23。
我尝试的所有值都舍入到最接近的偶数,但只有1.225和-1.225 舍入到1.23和-1.23。
sql - 银行家在 Oracle 中的四舍五入
Oracle 中是否有任何内部函数支持银行家的舍入,我需要在选择查询中使用一半到奇数的银行家舍入
c++ - c++半偶数舍入到x位
给定一个浮点数,我想使用半偶数舍入将结果舍入到小数点后 4 位,即舍入到下一个偶数方法。例如,当我有以下代码片段时:
输出是70.0453
,但我想成为70.0454
。我在标准库中找不到任何东西,有什么功能可以实现吗?如果不是,自定义函数会是什么样子?
powershell - Powershell:将分数转换为整数 - 令人惊讶的舍入行为
我对带小数的整数有一个有趣的问题。
假设我执行以下操作:
我已经尝试了 10 次以确定,并且 powershell 总是返回2
在这种情况下,有没有办法强制 Powershell 向上或向下舍入,默认情况下它是否设置为向下舍入?
我假设取决于机器和 Powershell 环境,我可能会在某些时候获得 3 个,而在其他时候获得 2 个。