202103-23 golang中json小谈之字符串转浮点数的操作 有时会有这种需求,将一个json数据形如:{"x":"golang","y":"520.1314"}中的y反序列化为浮点类型,如果这样写:packagemainimport("encoding/json""fmt")typeJsonTeststruct{Xstring`json:"x"`Yfloat64`json:"y"`}funcmain(){s:=`{"x":"golang","y":"520.1314"}`varjtJsonTesterr:=json.Unmarshal([]byte(s),&jt)iferr==nil{fmt.Printf("%+v\n",jt)}else{fmt.Println(err)... 继续阅读 >
202103-16 聊聊Python中的浮点数运算不准确问题 大家好,老Amy来了。之前就意识到一个问题,但是最近又有朋友提出来了,所以就想着干脆记录下来,分享给大家叭~啥问题呢?请看题:也就是说,需要大家计算1.1-1的值,很多朋友会说:“emmm…这还不简单,玩我呢?不就是0.1嘛”但是如果你用python去执行一下,会发现结果跟你想的不太一样,如下图:这样大家是不是发现了什么问题?是的,浮点数在运算过程中并没有保证完全精确,是什么原因导致了这种现象呢?很多朋友就会窃喜:... 继续阅读 >
202012-04 为什么JavaScript中0.1 + 0.2 != 0.3 涉及面试题:为什么0.1+0.2!=0.3?如何解决这个问题?原因,因为JS采用IEEE754双精度版本(64位),并且只要采用IEEE754的语言都有该问题我们都知道计算机是通过二进制来存储东西的,那么0.1在二进制中会表示为//(0011)表示循环0.1=2^-4*1.10011(0011)我们可以发现,0.1在二进制中是无限循环的一些数字,其实不只是0.1,其实很多十进制小数用二进制表示都是无限循环的。这样其实没什么问题,但是JS采用的浮... 继续阅读 >
202011-08 Java正确比较浮点数的方法 看下面这段代码,将d1和d2两个浮点数进行比较,输出的结果会是什么?doubled1=.1*3;doubled2=.3;System.out.println(d1==d2);按照正常逻辑来看,d1经过计算之后的结果应该是0.3,最后打印的结果应该是true,对吧?但是运行一下就会发现结果并不是true而是false。输出一下d1,发现得到的答案不是想象中的0.3而是0.30000000000000004,所以和d2进行比较结果自然是false如何正确地比较浮点数(单精度的flo... 继续阅读 >
202010-09 python 浮点数四舍五入需要注意的地方 本文主要分享基于python的数据分析三方库pandas,numpy的一次爬坑经历,发现并分析了python语言对于浮点数精度处理不准确的问题,并在最后给出合理的解决方案。如果你也在用python处理数据,建议看一下,毕竟0.1的误差都可能造成比较大的影响。问题出现早上到了公司,领导发了几个文件过来,说这两天测试环境跑出来的数据,与实际情况有所出入,看看哪出的问题,尽快解决···开始排查先对比数据,发现并不是所有的数据都出现问题... 继续阅读 >
202010-08 Python如何执行精确的浮点数运算 问题你需要对浮点数执行精确的计算操作,并且不希望有任何小误差的出现。解决方案浮点数的一个普遍问题是它们并不能精确的表示十进制数。并且,即使是最简单的数学运算也会产生小的误差,比如:>>>a=4.2>>>b=2.1>>>a+b6.300000000000001>>>(a+b)==6.3False>>>这些错误是由底层CPU和IEEE754标准通过自己的浮点单位去执行算术时的特征。由于Python的浮点数据类型使用底层表示存储数据,因此你没办法去避免这样的误... 继续阅读 >