[英]Parse iOS-SDK - decimal number adding zeros
我有一个Parse中的产品列表,格式如下:
{
Environment = Both;
"Ground_indoor" = Finished;
"Ground_outdoor" = Finished;
"Max_Working_Height" = "9.800000000000001";
Name = "8m Battery Scissor Lift - Genie GS2632";
"Non_Marking_Tyres" = 1;
"Platform_Length" = "2.26";
"Platform_Type" = "Scissor Lift";
"Platform_Width" = "0.8100000000000001";
"Tax_Class" = E;
Weight = 1956;
}
但是,出于某些奇怪的原因,任何带有“ 8”的东西之间都会添加一些随机零。 例如Platform_Width实际上是;
http://puu.sh/mlGLo/be9f200472.png
有什么线索吗?
是的,这是因为浮点数不准确。 您可能会在这里找到关于它的非常学术性的解释。
或者,如果要阅读的内容太多了,我们就这样简单地进行说明-例如,以0.81为例。 该数字不能精确地由浮点数表示,并且四舍五入为0.8100000000000001,因为int值81由二进制值1010001表示。为了使值成为0.81,如果可以采用81 x 10 ^ -2,则将是准确的。 (= 81/10 ^ 2。)但这是不可能的,因为必须使用基数2而不是10。因此最接近10 ^ 2 = 100的值将是128 = 2 ^ 7。 对于值81(1010001),您需要的总位数为9:6;对于值7(111),则需要3位。 那么,值81 x 2 ^ -7并不是很不准确。 因此,为了改善这种不准确性,我们可以将值81和7更改为其他值。 因此,您的值的公式为X = A x 2 ^ B,其中A和B是整数值,正或负。 数字越高,精度越高。 但是,您知道代表值A和B的位数是有限的。 对于float,总数为32。Double的总数为64,Decimal的总数为128。
希望这能解释您的问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.