Tag: 数学

Rails 3 – mysql返回的结果与postgresql不同

我试图在我的查询中做一些计算,我认为postgresql处理数学的方式与mysql不同,但我不确定区别在哪里。 这是我的控制器的查询: Invoice.find(params[:id], :joins => :invoice_line_items, :select => “invoices.id, SUM(invoice_line_items.hours * invoice_line_items.rate) as subtotal, SUM(invoice_line_items.hours * invoice_line_items.rate) – (SUM(invoice_line_items.hours * invoice_line_items.rate) * (invoices.discount_percentage / 100)) as total”, :group => “invoices.id”) 在我的开发环境中,我使用的是mysql,在我的生产环境中,我使用的是postgresql。 这些是我得到的输出。 作为参考,discount_percentage是20。 MySQL的: | id | subtotal | total | —————————————- | 21 | 570.0000 | 456.00000000 | PostgreSQL的: | id | subtotal | […]

Ruby数组方法和输出

给定一个数字,我的代码应该返回1和数字之间的所有偶数,并按以下格式打印它们: 22 4444 666666 etc… 这是到目前为止的代码: def pattern(n) n == 1 ? “” : arr = (1..n).select {|i| i if i % 2 == 0}.each {|item| return (item.to_s * item)} end 如果任何数字大于4,则只返回以下内容: 22 我认为这可能与块中的return有关。 但是,使用print或puts ,将返回单个数组元素,如下所示: [2] 解决这个问题的想法,以便我可以实现所需的输出?

为什么本代码无法找到权力? (ruby)

App Academy的练习测试表明,他们选择的方法是查找输入是否为2的幂是在循环中将其除以2并检查最终结果是1还是0(在测试数字1和0作为输入之后) ),这是有道理的,但为什么这种方式不起作用? def try gets(num) counter = 0 go = 2 ** counter if num % go == 0 return true else counter = counter + 1 end return false end 我无法弄清楚为什么这不起作用,除非计数器不起作用。

Ruby on Rails中的百分比

如果 @prescribed_wod_count = @user.workouts.rx_workouts.count返回4 和 @user_workout_count = @user.workouts.count返回26 怎么会 返回0.000%而不是15%?

Ruby编号精度与简单算术

我正在学习Ruby以获得乐趣,并且也在创建网站(但这是无关紧要的)。 在玩它时,我注意到一些“怪异”的东西 当我用irb计算4.21 + 5时,它回答9.21(很奇怪,对吧?) 当我计算4.23 + 5时,它给出9.23(哇,这绝对是奇怪的)。 当我输入4.22 + 5时,它会回答9.21999 ……(等等……这真的很奇怪)。 因此我的问题是:发生了什么? 我理解这种行为与分裂或真正的大数字,但在这个简单的情况下…. ??? 这是否意味着我无法使用Ruby开发会计应用程序? 是否有补丁或其他东西需要应用? (对我的大脑,最有可能)

如何在半复杂场景中正确检测局部最大值和曲线窗口?

我有一系列数据,需要在一定数量的读数(窗口大小)内检测系列中的峰值,并排除一定程度的背景“噪音”。 我还需要捕捉可感知曲线的起点和终点(即,当它开始滴答时,然后当它停止滴答时)。 数据是高精度浮子。 这是一个快速草图,它捕捉了我在视觉上遇到的最常见情况: 我尝试的一种方法是沿着曲线向后通过一个大小为X的窗口以检测峰值。 它开始运作良好,但我错过了最初没有预料到的很多条件。 我开始研究的另一种方法是增长窗口,可以发现更长的持续时间曲线。 另一种方法使用基于更多微积分的方法来监视一些速度/梯度方面。 似乎没有人达到最佳位置,可能是由于我缺乏统计分析经验。 也许我需要使用某种统计分析软件包来覆盖我的基础而不是编写我自己的算法? 或者是否有一种有效的方法可以使用某种本地最大技术直接使用SQL来解决这个问题? 我只是不确定如何有效地处理这个问题。 我尝试的每种方法似乎都会丢失各种阈值,检测太多峰值或不捕获整个事件(在读取过程中过早报告峰值数据点)。 最终这是在Ruby中实现的,所以如果你可以建议用Ruby来解决这个问题的最有效和最正确的方法,那么我也会接受一种语言无关的算法方法 。 或者是否有某个库可以解决我在检测最大峰值的情况下遇到的各种问题?

Ruby Programming Techniques:简单但不那么简单的对象操作

我想创建一个对象,让我们说一个Pie。 class Pie def initialize(name, flavor) @name = name @flavor = flavor end end 但馅饼可分为8块,半块或整块馅饼。 为了争论,我想知道如何为每个Pie对象提供每1/8,1 / 4或每个整体的价格。 我可以这样做: class Pie def initialize(name, flavor, price_all, price_half, price_piece) @name = name @flavor = flavor @price_all = price_all @price_half = price_half @price_piece = price_piece end end 但是现在,如果我要创建十五个Pie对象,我会通过使用诸如此类的方法随机取出某些部分 getPieceOfPie(pie_name) 我怎样才能生成所有可用馅饼的价值? 最终使用如下方法: myCurrentInventoryHas(pie_name) # output: 2 whole strawberry pies […]

对回文产品问题感到困惑

我一直在学习Ruby,所以我想我会尝试一些项目的Euler难题。 令人尴尬的是,我只是解决了问题4 … 问题4如下: 回文数字读取两种方式相同。 由两个2位数字的乘积制成的最大回文是9009 = 91×99。 找到由两个3位数字的乘积制成的最大回文。 所以我想我会在一个嵌套的for循环中从999循环到100并对回文进行测试,然后当我找到第一个(应该是最大的一个)时突破循环: final=nil range = 100…1000 for a in range.to_a.reverse do for b in range.to_a.reverse do c=a*b final=c if c.to_s == c.to_s.reverse break if !final.nil? end break if !final.nil? end puts final 这确实输出了回文580085,但显然这不是该范围内两个三位数字的最高乘积。 奇怪的是,如果我将范围更改为10 … 100,则相同的代码成功返回9009,就像在示例中一样。 谁能告诉我哪里出错了? 还有,有一种更好的方法可以打破内部循环吗? 谢谢

截断浮点数而不进行舍入

我有一个浮点数,我想截断到3个位置,但我不想舍入。 例如,将1.0155555555555555转换为1.015 (不是1.016 )。 我将如何在Ruby中执行此操作?

检查数组中两个不同数字的总和是否等于变量数?

在Ruby中,我想取一组数字,选择2个不同的数字,将这2个数字加在一起,看看那里的天气等于变量x的变量x。 这是我使用的代码 def arrayIsEqual? (numArray, x) return true if numArray.sample + numArray.sample == x return false if numArray.empty? || numArray.count == 1 end 例如 numArray = [4,2,7,5] x = 11 arrayIsEqual (numArray, n)应返回true ,因为4 + 7 = n(11) 我如何让它工作? 我不希望它是2个随机数,只是任意2个不同的数字加起来n