引用BigDecimal类的文档,n,m=a.precsprecreturnsnumberofsignificantdigits(n)andmaximumnumberofsignificantdigits(m)ofa.我对以下与BigDecimal相关的输出感到困惑。require'bigdecimal'BigDecimal.new('1').precs#=>[9,18]BigDecimal.new(1).precs#=>[9,27]我不明白为什么当传递String时,有效数字的最大数目比传递Fixnum时少。它还会导致任何精度问题吗? 最佳答案
我想更改float实例的self值。我有以下方法:classFloatdefround_by(precision)(self*10**precision).round.to_f/10**precisionendend我想添加round_by!修改自身值的方法。classFloatdefround_by!(precision)self=self.round_by(precision)endend但是我得到一个错误,说我不能改变self的值。有什么想法吗? 最佳答案 您不能更改self的值。它总是指向当前对象,你不能让它指向别的东西。当
我想知道这是不是真的:当我对一个平方整数求平方根时,就像在f=Math.sqrt(123*123)我将得到一个非常接近123的float。由于浮点表示精度,这可能类似于122.99999999999999999999或123.000000000000000000001。因为floor(122.999999999999999999)是122,我应该得到122而不是123。所以我希望floor(sqrt(i*i))==i-1在大约50%的情况下。奇怪的是,对于我测试过的所有数字,floor(sqrt(i*i)==i。这是一个用于测试前1亿个数字的小ruby脚本:100_000_000.
我想在Controller上使用这个辅助方法。有什么办法可以实现吗? 最佳答案 可能不是一个好主意,但如果必须,请像这样包含帮助程序:classWhateverControllerincludeActionView::Helpers::NumberHelperdefshowrender:text=>number_with_precision(2342.234,:precision=>2)endend 关于ruby-on-rails-在rails3的Controller上使用number_
我有一个float,我想截断到3个位置,但我不想四舍五入。例如,将1.0155555555555555转换为1.015(而不是1.016)。我将如何在Ruby中执行此操作? 最佳答案 您还可以转换为BigDecimal,然后对其调用truncate。1.237.to_d.truncate(2).to_f#willreturn1.23 关于ruby-截断float而不向上舍入,我们在StackOverflow上找到一个类似的问题: https://stackov
在Ruby中可以设置float的显示精度吗?类似于:z=1/3z.to_s#=>0.33333333333333z.to_s(3)#=>0.333z.to_s(5)#=>0.33333或者我是否必须覆盖Float的to_s方法? 最佳答案 z.round(2)或x.round(3)是最简单的解决方案。参见http://www.ruby-doc.org/core-1.9.3/Float.html#method-i-round.也就是说,这只会确保它不超过那么多位数。在1/3的情况下没问题,但如果你说0.25.round(3)你会得到0
我有这个编辑表单。但是当我存储诸如1.5之类的东西时,我想将其显示为1.50。我如何使用表单助手来做到这一点?'cost'%> 最佳答案 您应该使用number_with_precision助手。Seedoc.例子:number_with_precision(1.5,:precision=>2)=>1.50在你的表单助手中:'cost',:value=>(number_with_precision(f.object.cost,:precision=>2)||0)%>顺便说一句,如果你真的想显示一些价格,请使用number_to_cu
我需要使用JavaScript将小数四舍五入到六位,但我需要考虑旧版浏览器,所以我can'trelyonNumber.toFixedThebigcatchwithtoExponential,toFixed,andtoPrecisionisthattheyarefairlymodernconstructsnotsupportedinMozillauntilFirefoxversion1.5(althoughIEsupportedthemethodssinceversion5.5).Whileit'smostlysafetousethesemethods,olderbrowsersWILL
我不知道我是否遗漏了一些明显的东西,但是......在IE、Opera和Chrome中,我从以5结尾的舍入数字中得到了我期望的结果:125toPrecision(2)=>13011.5toPrecision(2)=>12这是我所期望的。不过,Firefox更“复杂”一点,产生以下内容:125toPrecision(2)=>120//wtf!!!11.5toPrecision(2)=>12经过一番摸索,我得出的结论是Firefox使用了“四舍五入”规则,如果5之前的数字是偶数,则数字向下舍入,如果5之前的数字是奇数数字四舍五入:0.5=>01.5=>22.5=>23.5=>4,etc.我
我想生成一个1到10之间的随机数,最多保留2位小数,我目前正在使用下面的这个来生成我的号码,varrandomnum=Math.floor(Math.random()*(10.00-1.00+1.00))+1.00;最后,我想知道如何生成这样的数字:1.665.868.34格式为:varrandomnum=然后是代码旁注:我不记得为什么我以前那样生成我的数字,但记得一些关于Math.random生成小数点后8位数字的事情。感谢您的帮助!:)Ps:我看过很多关于等待向下或向上舍入生成的数字的帖子,但还没有找到一个想要直接生成它们的帖子。更新:我想要一个数字值而不是一个看起来像数字的字符串