JavaScript 中的高斯/银行家舍入

2023-11-21

我一直在使用Math.Round(myNumber, MidpointRounding.ToEven)在 C# 中进行服务器端舍入,但是,用户需要“实时”知道服务器端操作的结果是什么,这意味着(避免Ajax请求)创建一个 JavaScript 方法来复制MidpointRounding.ToEvenC# 使用的方法。

MidpointRounding.ToEven 是高斯/银行家四舍五入,描述了一种非常常见的会计系统舍入方法here.

有人对这个有经验么?我在网上找到了例子,但它们并没有四舍五入given小数位数...


function evenRound(num, decimalPlaces) {
    var d = decimalPlaces || 0;
    var m = Math.pow(10, d);
    var n = +(d ? num * m : num).toFixed(8); // Avoid rounding errors
    var i = Math.floor(n), f = n - i;
    var e = 1e-8; // Allow for rounding errors in f
    var r = (f > 0.5 - e && f < 0.5 + e) ?
                ((i % 2 == 0) ? i : i + 1) : Math.round(n);
    return d ? r / m : r;
}

console.log( evenRound(1.5) ); // 2
console.log( evenRound(2.5) ); // 2
console.log( evenRound(1.535, 2) ); // 1.54
console.log( evenRound(1.525, 2) ); // 1.52

现场演示:http://jsfiddle.net/NbvBp/

对于看起来更严格的处理(我从未使用过它),你可以尝试这个大数执行。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JavaScript 中的高斯/银行家舍入 的相关文章

随机推荐

  • 如何在 Java 中将电话号码格式化为字符串?

    我一直将电话号码存储为很长的长度 我想在将电话号码打印为字符串时简单地添加连字符 我尝试使用DecimalFormat但这不喜欢连字符 可能是因为它用于格式化十进制数字而不是长整数 long phoneFmt 123456789L Deci
  • Android studio java.exe 以非零退出值 3 结束

    我已经通过了与 multidex 问题相关的非零退出值 1 2 但现在我得到了非零退出值 3 工作室留言 Information Gradle Executing tasks emoticons lib proj assembleDebug
  • 通过AJAX调用提示用户保存文件

    我正在将 DHTMLX 网格导出到 csv 并已成功创建 CSV 文件 我遇到的问题是它没有提示用户保存 打开文件 我使用 javascript 中的 post 调用将 CSV 字符串发送到 PHP 然后将该字符串写入 csv 由于某种原因
  • 如何在 C# 中使用 imageMagick

    您能解释一下如何将 ImageMagick 与 C 一起使用吗 我正在尝试将 PDF 页面转换为图像 我想运行 imageMagick 命令 convert 密度 300 input pdf output png string argume
  • 获取类函数的参数数量

    有没有办法检测类中函数的参数数量 我想做的是以下内容 class foo path path to file if file exists path die require path if class exists class die c
  • 在 Maps V2 上绘制多色折线

    我按照以下方式在地图上绘制纯色折线 效果很好 PolylineOptions polyLine new PolylineOptions polyLine width 5 polyLine color Color RED polyLine g
  • WPF 的语法荧光笔[重复]

    这个问题在这里已经有答案了 我目前正在为 WPF 应用程序寻找语法荧光笔 用户可以在文本框中输入内容 希望能够识别代码并相应地突出显示语法 我想先支持C 稍后再支持其他语言 问题重复394751 如果您不介意没有任何文档 Avalon编辑是
  • 使用@EJB时,每个托管bean是否都有自己的@EJB实例?

    我正在将 JSF 2 2 用于 Web 项目 并且现在正在实现登录页面 我有一个login xhtml作为view 和一个名为的支持 beanUserLoginView 这种豆子有一个EJB属性beanprivate UserService
  • 组合类型别名的协议和空一致协议之间的区别

    Swift 中这两者有区别吗 protocol ABProtocol AProtocol BProtocol typealias ABProtocol AProtocol BProtocol 为了让事情更清楚 我将第二个重命名为 typea
  • 从变量中批量提取路径和文件名

    如何从变量中提取路径和文件名 Setlocal EnableDelayedExpansion set file C Users l72rugschiri Desktop fs cfg 我想在不使用任何函数或任何 GOTO 的情况下做到这一点
  • ruby 的 <=> 运算符和排序方法

    player1 Player new moe player2 Player new larry 60 player3 Player new curly 125 players player1 player2 player3 上面 我创建了一
  • 路由器命名的插座被激活一次

    是否有可能让路由器命名的插座被激活一次 然后永远不会被破坏 无论主插座中导航什么路线 目的是让组件保留在页面上 例如 sidebar 但在初始加载时获得路由的好处 例如防护 解析器 和延迟加载 要求是命名的插座不应以任何负面方式影响用户体验
  • 正则表达式使用字符限制验证密码

    我需要使用以下规则验证密码 6 至 20 个字符 必须包含至少一位数字 必须包含至少一个字母 不区分大小写 可以包含以下字符 以下表达式匹配除最后一个要求之外的所有要求 最后一张我能做什么 d A z 6 20 我不完全确定我有这个权利 但
  • STL容器函数返回值

    当查看 STL 容器的成员函数时 我想到了一个奇怪的想法 为什么没有像这样的功能std vector
  • 将泛型类与 ObjectDataSource 一起使用

    我有一个通用的 Repository 类 我想与 ObjectDataSource 一起使用 Repository 位于一个名为 DataAccess 的单独项目中 根据这篇文章来自 MS 新闻组 相关部分复制如下 在内部 ObjectDa
  • 如何在 javafx 中更改 TextField 的背景颜色而不更改边框?

    我试图将 TextField colorBox0 的背景颜色更改为 value0 但它消除了边框 这是我的代码的简化版本 static Paint value0 Paint valueOf FFFFFF TextField colorBox
  • 如何找到当前单元格上方最近的非空白单元格?

    我有一列数据 我需要找到前一个非空白单元格 例如 如果我有以下数据 foo formula where 表示一个空白单元格 那么我想要 formula 单元格来查找对包含的单元格的引用foo无论它们之间插入多少个空白单元格 测试列中包含空白
  • 如何使用 std::enable_if 根据模板类型启用或禁用构造函数?

    我有以下模板化对象 template lt typename type 1 typename type 2 gt struct result I want to enable these two constructors only if t
  • ASP.NET MVC:我可以在 Controller 类上说 [Authorize Roles="Administrators"],但有一个公共操作吗?

    我开始使用默认项目的AccountController 但我已经将其扩展 更改得面目全非 然而 与原版一样 我有一个LogOn and LogOff行动 显然 LogOn每个人都必须能够采取行动 但是 由于我已向该控制器添加了许多其他操作
  • JavaScript 中的高斯/银行家舍入

    我一直在使用Math Round myNumber MidpointRounding ToEven 在 C 中进行服务器端舍入 但是 用户需要 实时 知道服务器端操作的结果是什么 这意味着 避免Ajax请求 创建一个 JavaScript