Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何精确地将百分比值四舍五入到小数点后两位?_Ios_Swift_Uikit - Fatal编程技术网

Ios 如何精确地将百分比值四舍五入到小数点后两位?

Ios 如何精确地将百分比值四舍五入到小数点后两位?,ios,swift,uikit,Ios,Swift,Uikit,场景:我有一个UISlider,它允许从0到100的值。此滑块将返回一个浮点值,例如76.2345654234。在核心数据中,我想以双精度的形式存储这个百分比:0.76 问题:在浮球上使用floor()或round()会给我76分。好。但如果我除以100,就会出现令人讨厌的尾随小数。有时某些数字会起作用,并给我2位小数,但没有错误,每次,另一个数字不会起作用,我会得到如下结果:0.760000001 没有,我在这个网站上看到过,或者其他网站上100%都能正常工作。肯定有办法做这么简单的事?谢谢

场景:我有一个
UISlider
,它允许从0到100的值。此滑块将返回一个
浮点值
,例如76.2345654234。在核心数据中,我想以双精度的形式存储这个百分比:0.76

问题:在浮球上使用
floor()
round()
会给我76分。好。但如果我除以100,就会出现令人讨厌的尾随小数。有时某些数字会起作用,并给我2位小数,但没有错误,每次,另一个数字不会起作用,我会得到如下结果:0.760000001

没有,我在这个网站上看到过,或者其他网站上100%都能正常工作。肯定有办法做这么简单的事?谢谢

我想储存这个百分比

太好了。存储一个百分比。你的情况是一个整数,76。把它储存起来

有关所有血淋淋的详细信息,请参见,但出于您的目的,答案是将值存储为整数


如果你真的想要一个十进制值,那么你可以,你会得到你想要的,但是我建议对两个有效数字百分比使用整数。更直截了当。

您说过要存储一个号码:

替身

此格式:0.76

你不能两者都做,你必须选一个。Double不是十进制数,它不能准确地存储大多数十进制数。见这个问题:

如果需要精确存储十进制数,请使用与Double不同的类型(例如,decimal类型)。如果出于某种原因,您必须将数字存储为双精度,那么您将不得不接受不准确存储十进制数字的情况


旁注:在打印不精确的双精度值时,有一些方法可以将其舍入到附近的小数,但这是另一个主题,而不是您提出的问题。

这是否回答了您的问题?现在你已经链接到我链接的问题了,再次阅读这个问题,我认为问题是你需要学习浮点数是如何工作的,有时你需要期望值与期望值之间存在非常小的差异,实际上没有“2位小数双精度”这样的东西。Double不是小数,Double(0.01)也不完全是0.01。您是否尝试过使用十进制类型而不是浮点数或双精度?Hi@JoakimDanielson的可能副本我感谢您的帮助,但没有一个链接的解决方案能够像许多评论中指出的那样始终如一地工作,这些评论要么被忽略,要么被告知接受它。如果一个解决方案不是一直有效,它就不起作用!如果不能做到这一点,那很好,但这些答案并不是这样说的,这是误导性的。一个以结果为导向的答案!我很感激。我选择double的唯一原因是,根据我有限的研究,大多数讨论存储百分比的最佳数据类型的人似乎建议使用double或decimal。但是没有人区分是否需要分数,这是非常有用的。我可能走这条路,谢谢!如果你想要一个实数的精确表示,那么Double是非常好的。如果您想要一个精确映射到以10为基数的值(即“2位小数”),那么Double是非常糟糕的,因为它是以2为基数的。所以你需要选择你想要的东西。如果你想要两个十进制数字,那么你需要一个以10为基数的数字,而不是双精度的数字。如果你想要一些精确到小数点后很多位的东西(但不在乎它是否以10为基数),那么Double是完美的。另一个非常有用的答案。谢谢你帮助我理解,而不仅仅是无视我的努力。在这一点上,我将按照上面的建议更改为decimal或int。我只是希望我没有看到这么多人建议百分比值加倍,这会让我省去很多悲伤。