>>> float(str(0.65000000000000002))
0.65000000000000002
>>> float(str(0.47000000000000003))
0.46999999999999997 ???
这是怎么回事?
如何将 0.47000000000000003 转换为字符串并将结果值转换回 float ?
我在 Windows 上使用 Python 2.5.4。
最佳答案
str(0.47000000000000003) 给出 '0.47' 和 float('0.47') 可以是 0.46999999999999997。
这是由于 float 的表示方式(参见这篇 wikipedia 文章)
注意:float(repr(0.47000000000000003)) 或 eval(repr(0.47000000000000003)) 会给你预期的结果,但你应该使用 Decimal如果您需要精度。
关于Python float - str - 浮点怪异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1778368/
我正在尝试使用正则表达式验证美元金额:^[0-9]+\.[0-9]{2}$这工作正常,但每当用户提交表单并且美元金额以0(零)结尾时,ruby(或rails?)将0砍掉。所以500.00变成500.0,因此正则表达式验证失败。有没有办法让ruby/rails保持用户输入的格式,而不管尾随零? 最佳答案 我假设您的美元金额是小数类型。因此,用户在字段中输入的任何值在保存到数据库之前都会从字符串转换为适当的类型。验证适用于已转换为数字类型的值,因此在您的情况下,正则表达式并不是真正合适的验证过滤器。不过,您有几种可能性可以解决这个问
是否有Ruby等效于Python的方法来获取在字符串末尾结束的子字符串,如str[3:]?必须输入字符串的长度并不方便。 最佳答案 传递最后一个元素=-1的范围str[3..-1] 关于python-Ruby相当于Pythonstr[3:],我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/12978768/
假设我们有一个字符串str。如果str仅包含一个字符,例如str="1",则str[-1..1]返回1.但是如果str的size(length)比一个长,比如str="anythingelse",然后str[-1..1]返回""(空字符串)。为什么Ruby会这样解释字符串切片? 最佳答案 这种行为正是字符范围的工作方式。范围开始是-1,这是字符串中的最后一个字符。范围结束为1,即从开始算起的第二个位置。所以对于单字符字符串,这相当于0..1,也就是那个单个字符。对于双字符字符串,这是1..1,即第二个字符。对于三个字符的字符串,这是
有没有人用ruby解决这个问题:假设我们有:a=8.1999999我们想将它四舍五入为2位小数,即8.20,然后乘以1,000,000得到8,200,000我们是这样做的;(a.round(2)*1000000).to_i但是我们得到的是8199999,为什么?奇怪的是,如果我们乘以1000、100000或10000000而不是1000000,我们会得到正确的结果。有人知道为什么吗?我们正在使用ruby1.9.2并尝试使用1.9.3。谢谢! 最佳答案 每当你在计算中得到时髦的数字时使用bigdecimalrequire'bi
我haveaclass它公开了一个字符串值和一个int值(分别是命令输出和退出代码)。除了通过to_s和to_i公开它们之外,我还使用to_str和to_int,如下所示:classStatusdefto_s@outputendalias:to_str:to_sdefto_i@status.exitstatusendalias:to_int:to_iend我的想法是能够在尽可能多的情况下使用这个对象。将其强制转换为字符串或整数会增加可用性。例如,我可以将对象与字符串连接起来:a_string="Outputwas:"+results(我想用这个作为int强制转换的例子,但是Fixnum
在Ruby中,是否存在可以在Python类上定义的与__str__()方法等效的方法? 最佳答案 你可以使用to_s。http://briancarper.net/2006/09/26/ruby-to_s-vs-to_str/ 关于Ruby-相当于Python__str__()方法?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/134969/
什么是最优雅的做法'string'=>['s','st','str','stri','strin','string']我一直在想一个类轮,但我不能完全做到。欢迎任何解决方案,谢谢。 最佳答案 这个怎么样?s='string'res=s.length.times.map{|len|s[0..len]}res#=>["s","st","str","stri","strin","string"] 关于ruby-'string'到['s','st','str','stri','strin','s
我有一个ActiveRecord对象的二元素数组,slots_to_import。这些对象具有begin_at列,因此具有属性。我试图获取具有唯一begin_at值的对象。las,slots_to_import.uniq_by(&:begin_at)不起作用。但是两个对象的begin_at值是相等的:(rdb:1)pslots_to_import.first.begin_at==slots_to_import.last.begin_attrue(rdb:1)pslots_to_import.uniq_by(&:begin_at).map(&:begin_at)[Mon,26Nov201
在MRI中,似乎rb_id2str()当您调用Symbol#to_s时负责完成所有工作.我惊讶地发现这是一个极其神秘的函数,而我认为这是一个相当直接的操作。我正在寻找有关此功能的详细说明。作为引用,这里是1.9.3中源代码的链接:http://rxr.whitequark.org/mri/source/parse.y?v=1.9.3-p195#9950一些具体问题:什么是四大ifblock在做什么?if(idif(idif(st_lookup(global_symbols.id_str,id,&data))if(is_attrset_id(id))如果能大致了解if语句中每个代码块的作
据我了解,Ruby(1.9.2)float的精度为15位十进制数字。因此,我希望将floatx舍入到小数点后15位将等于x。对于此计算,情况并非如此。x=(0.33*10)x==x.round(15)#=>false顺便说一句,四舍五入到16位返回true。你能给我解释一下吗? 最佳答案 部分问题是0.33在底层格式中没有精确的表示,因为它不能用一系列1/2n项来表示。因此,当它乘以10时,乘以的数字与0.33略有不同。就此而言,3.3也没有精确表示。第一部分当数字没有精确的10进制表示时,在转换尾数中有信息的最低有效位时会有余数。