jjzjj

javascript - Firefox 和 Javascript 舍入规则

coder 2025-01-22 原文

我不知道我是否遗漏了一些明显的东西,但是......

在 IE、Opera 和 Chrome 中,我从以 5 结尾的舍入数字中得到了我期望的结果:

125 toPrecision(2) => 130
11.5 toPrecision(2) => 12

这是我所期望的。

不过,Firefox 更“复杂”一点,产生以下内容:

125 toPrecision(2) => 120 //wtf!!!
11.5 toPrecision(2) => 12

经过一番摸索,我得出的结论是 Firefox 使用了“四舍五入”规则,如果 5 之前的数字是偶数,则数字向下舍入,如果 5 之前的数字是奇数数字四舍五入:

0.5 => 0
1.5 => 2
2.5 => 2
3.5 => 4, etc.

我使用四舍五入的结果通过伪随机生成的问题输入来测试学生对工程问题的解决方案。在 Chrome 中输入的问题可能是 h=1020 mm,但在 FF、Chrome 或 Opera 中 h=1030 mm。

我需要一个函数来使舍入保持一致,即我希望 0.0001235 舍入为 0.000124,我希望 1234 舍入为 1240,所以我不能使用简单的 num = Math.floor(num + 0.5);更复杂的是,我希望输入变量和学生答案对 3 个 sig digs 是正确的,除非第一个数字是 1,在这种情况下我想要 4 个 sig digs:

234.5 => 235
134.5 => 134.5

我通过将数字转换为字符串并测试“1”的第一个非零、非小数点和非负字符,根据第一个数字破解了 3 或 4 个 sig 数字的解决方案 -不漂亮,但它有效。我可以对舍入问题做类似的事情,检查要舍入的数字是否为 5,但我想知道是否有一个优雅的按位解决方案。

最佳答案

关于“我希望 0.0001235 向上舍入为 0.000124”:这没有多大意义,因为与 0.5、1.5、2.5 等不同,十进制数 0.0001235 不能完全用基数 2 表示;因此它的舍入可能略高于 (A) 或略低于 (B) 的确切值,其中 (A) 和 (B) 会产生不同的舍入:(A) 为 0.000124,(B) 为 0.000123。

即使您在一些计算后将小数(例如 1.5)四舍五入为整数,(1.5).toPrecision(2) 也不一定会产生最接近精确值的值。原因是准确的值可能刚好低于 1.5,在这种情况下正确的四舍五入是 1,而不是 2。这个问题被称为制表者的困境。

这也意味着,如果两个学生使用略有不同的方法(都相当准确)并对他们的近似值进行四舍五入,他们将得到不同的四舍五入结果(即使他们的近似值可能彼此非常接近)。如果出现平局,例如 0.0001235(四舍五入为 0.000124),制表者困境是不可避免的,除非所有计算都准确执行或算法专门检查平局。

但是,如果确切结果是平局或非常接近平局,仍然可以检查学生是否回答了 (A) 或 (B)。

关于javascript - Firefox 和 Javascript 舍入规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6567690/

有关javascript - Firefox 和 Javascript 舍入规则的更多相关文章

  1. ruby - 无法在 60 秒内获得稳定的 Firefox 连接 (127.0.0.1 :7055) - 2

    我使用的是Firefox版本36.0.1和Selenium-Webdrivergem版本2.45.0。我能够创建Firefox实例,但无法使用脚本继续进行进一步的操作无法在60秒内获得稳定的Firefox连接(127.0.0.1:7055)错误。有人能帮帮我吗? 最佳答案 我遇到了同样的问题。降级到firefoxv33后一切正常。您可以找到旧版本here 关于ruby-无法在60秒内获得稳定的Firefox连接(127.0.0.1:7055),我们在StackOverflow上找到一个类

  2. ruby - Watir 更改 Mozilla Firefox 首选项 - 2

    我正在使用Watir运行一个Ruby脚本来为我自动化一些事情。我试图自动将一些文件保存到某个目录。因此,在我的Mozilla设置中,我将默认下载目录设置为桌面并选择自动保存文件。但是,当我开始运行我的脚本时,这些更改并没有反射(reflect)出来。似乎首选项恢复为默认值。我已经包括以下内容require"rubygems"#Optional.require"watir-webdriver"#Forwebautomation.require"win32ole"#Forfilesavedialog.并打开一个新的firefox实例:browser=Watir::Browser.new(:

  3. ruby-on-rails - 使用 javascript 更改数据方法不会更改 ajax 调用用户的什么方法? - 2

    我遇到了一个非常奇怪的问题,我很难解决。在我看来,我有一个与data-remote="true"和data-method="delete"的链接。当我单击该链接时,我可以看到对我的Rails服务器的DELETE请求。返回的JS代码会更改此链接的属性,其中包括href和data-method。再次单击此链接后,我的服务器收到了对新href的请求,但使用的是旧的data-method,即使我已将其从DELETE到POST(它仍然发送一个DELETE请求)。但是,如果我刷新页面,HTML与"new"HTML相同(随返回的JS发生变化),但它实际上发送了正确的请求类型。这就是这个问题令我困惑的

  4. ruby - 在 Mechanize 中使用 JavaScript 单击链接 - 2

    我有这个:AccountSummary我想单击该链接,但在使用link_to时出现错误。我试过:bot.click(page.link_with(:href=>/menu_home/))bot.click(page.link_with(:class=>'top_level_active'))bot.click(page.link_with(:href=>/AccountSummary/))我得到的错误是:NoMethodError:nil:NilClass的未定义方法“[]” 最佳答案 那是一个javascript链接。Mechan

  5. Ruby Regex 舍入尾随零 - 2

    我正在寻找一个正则表达式来从十进制数字中删除尾随零。它应该返回以下结果:0.0002300->0.0002310.002300->10.0023100.0->1001000->10000.0->00->0基本上,如果小数部分为0,它应该删除尾随零和尾随小数点。当它是该值时,它也应该返回0。有什么想法吗?谢谢。 最佳答案 另一种方式["100.0","0.00223000"].map{|x|"%g"%x} 关于RubyRegex舍入尾随零,我们在StackOverflow上找到一个类似的问

  6. ruby - Rubocop 规则 : Never use 'do' with multi-line 'while - 2

    我有以下代码#coloursarandomcellwithacorrectcolourdefcolour_random!whiletruedocol,row=rand(columns),rand(rows)cell=self[row,col]ifcell.empty?thencell.should_be_filled??cell.colour!(1):cell.colour!(0)breakendendend做什么并不重要,尽管它应该很明显。关键是Rubocop给了我一个警告Neveruse'do'withmulti-line'while为什么我不应该那样做?那我该怎么办呢?

  7. javascript - jQuery 的 jquery-1.10.2.min.map 正在触发 404(未找到) - 2

    我看到有关未找到文件min.map的错误消息:GETjQuery'sjquery-1.10.2.min.mapistriggeringa404(NotFound)截图这是从哪里来的? 最佳答案 如果ChromeDevTools报告.map文件的404(可能是jquery-1.10.2.min.map、jquery.min.map或jquery-2.0.3.min.map,但任何事情都可能发生)首先要知道的是,这仅在使用DevTools时才会请求。您的用户不会遇到此404。现在您可以修复此问题或禁用sourcemap功能。修复:获取文

  8. ruby-on-rails - 我将 Rails3 与 tinymce 一起使用。如何呈现用户关闭浏览器javascript然后输入xss? - 2

    我有一个用Rails3编写的站点。我的帖子模型有一个名为“内容”的文本列。在帖子面板中,html表单使用tinymce将“content”列设置为textarea字段。在首页,因为使用了tinymce,post.html.erb的代码需要用这样的原始方法来实现。.好的,现在如果我关闭浏览器javascript,这个文本区域可以在没有tinymce的情况下输入,也许用户会输入任何xss,比如alert('xss');.我的前台会显示那个警告框。我尝试sanitize(@post.content)在posts_controller中,但sanitize方法将相互过滤tinymce样式。例如

  9. ruby - 以非 root 用户身份从 ruby​​ 在 Xvfb 中运行 Selenium::WebDriver::Firefox - 2

    我正在尝试使用ruby​​脚本进行一些headless测试。本质上,我在显示器:1上执行Xvfb,然后使用watir-webdriver启动Watir::Browser.new(:firefox)。如果您以root身份运行脚本,效果会很好-我可以运行x11vnc并观察脚本执行浏览器并与之交互。问题是,我需要能够从Rails应用程序调用这个ruby​​脚本,而不是以root身份运行它...如果我尝试以普通用户身份从命令行运行脚本,Xvfb会启动on:1像往常一样,但Watir不会启动浏览器......它最终会在60秒后超时。通过VNC连接会显示带有鼠标光标的黑屏。我可以从命令行完成所有操

  10. ruby - 使用 Selenium WebDriver 启用/禁用 javascript - 2

    出于某种原因,我必须为Firefox禁用javascript(手动,我们按照提到的步骤执行http://support.mozilla.org/en-US/kb/javascript-settings-for-interactive-web-pages#w_enabling-and-disabling-javascript)。使用Ruby的SeleniumWebDriver如何实现这一点? 最佳答案 是的,这是可能的。而是另一种方式。您首先需要查看链接Selenium::WebDriver::Firefox::Profile#[]=

随机推荐