问题标签 [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.

0 投票
1 回答
929 浏览

sql - 浮点数据类型不适用于银行家四舍五入——SQL Server 2008

为了提供一些背景知识,我目前正在开展一个将 Access 数据库及其代码转换为 SQL 的项目。

在此过程中,我在 SQL Server 中将Access 数据类型更改Double为;Float我这样做是因为这些数据类型密切相关,并且因为我的数据库执行了大量的除法和乘法运算(我听说浮点数最适合)。

转换数据库的另一个问题是,Access 使用银行家四舍五入,而 SQL 没有。我出去发现了两个 UD 银行家舍入函数,两者都没有产生应有的一致的银行家舍入结果。

在尝试对浮点数运行这些银行家舍入函数(包括减法和加法)时,我应该预料到这种不一致吗?

下面是这两个函数...

0 投票
2 回答
864 浏览

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) 显然已注销(审计标准)!

0 投票
1 回答
1421 浏览

arm - ARM NEON 将 f32 转换为 s32 并朝偶数方向舍入

是否有任何函数可以控制 vcvt_s32_f32 内在的舍入模式?我想对偶数使用舍入而不是向负无穷大舍入。

谢谢。

0 投票
1 回答
184 浏览

java - 使用 BigDecimal ROUND_HALF_EVEN 舍入会得到错误的输出吗?

我对使用此处ROUND_HALF_EVEN描述的 BigDecimal 数字进行舍入时遇到问题。

我想四舍五入到小数点后 2 位:

输出:

23.87

但是数字6是偶数,所以它应该是 23.86 还是不是?

0 投票
6 回答
4328 浏览

c++ - 符合 IEEE-754 的舍入到偶数

C 标准库提供 C99 中的roundlroundllround系列函数。但是,这些函数不符合 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>

0 投票
1 回答
364 浏览

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 使用BigDecimalString直接来自数据库生成。不幸的是,格式化必须在 JavaScript 中完成,它缺乏对正确舍入的很多支持(我正在考虑实现一些)。

0 投票
2 回答
324 浏览

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

0 投票
1 回答
1001 浏览

sql - 银行家在 Oracle 中的四舍五入

Oracle 中是否有任何内部函数支持银行家的舍入,我需要在选择查询中使用一半到奇数的银行家舍入

0 投票
2 回答
518 浏览

c++ - c++半偶数舍入到x位

给定一个浮点数,我想使用半偶数舍入将结果舍入到小数点后 4 位,即舍入到下一个偶数方法。例如,当我有以下代码片段时:

输出是70.0453,但我想成为70.0454。我在标准库中找不到任何东西,有什么功能可以实现吗?如果不是,自定义函数会是什么样子?

0 投票
2 回答
4565 浏览

powershell - Powershell:将分数转换为整数 - 令人惊讶的舍入行为

我对带小数的整数有一个有趣的问题。

假设我执行以下操作:

我已经尝试了 10 次以确定,并且 powershell 总是返回2

在这种情况下,有没有办法强制 Powershell 向上或向下舍入,默认情况下它是否设置为向下舍入?

我假设取决于机器和 Powershell 环境,我可能会在某些时候获得 3 个,而在其他时候获得 2 个。