使用正确的舍入在swift中将十进制格式化为字符串

时间:2015-07-08 14:53:46

标签: swift

我一直在使用以下方法将小数位格式化为字符串:

NSString(format: "%\(0.2)f", DECIMAL)

然而,我注意到一些奇怪的事情,1.025轮到1.02,其中1.026轮到1.03。这是正确的行为吗?

我记得在数学方面,我们总是在.5进行整理。这是我从未注意到的预期行为吗?或者有更好的方法来做到这一点。

enter image description here

NIST 舍入规则如下:(http://physics.nist.gov/Pubs/SP811/appenB.html#B.7.2

  

B.7.2舍入转换数量的数值

     

使用Secs中给出的因子。 B.8和B.9转换的值   数量在第二节中展示。 B.3。在大多数情况下的产品   未转换的数值和因子将是一个数字   具有超过重要数字的位数的值   未转换数值的数字(见第7.9节)。正确   转换过程需要舍入此转换的数值   到有效数字的有效位数   最大可能的未转换数值的舍入误差。

     

示例:要表示l = 36 ftin米的值,请使用该系数   来自Sec的3.048 E-01 B.8或Sec。 B.9并写下

     

l = 36英尺×0.3048米/英尺= 10.9728米= 11.0米。最终结果,l =   11.0 m,基于以下推理:数值“36”具有两位有效数字,因此可能具有相对最大值   舍入误差(简称本指南中的RE)为±   0.5 / 36 =±1.4%,因为它可能是由于数字35.5,36.5或35.5和36.5之间的任何数字四舍五入所致。成为   与此RE一致,转换后的数值“10.9728”为   四舍五入至11.0或三位有效数字,因为数字为11.0   RE的值为±0.05 / 11.0 =±0.45%。虽然这个±0.45%的RE是   未转换数值“36”的±1.4%RE的三分之一   如果转换后的数值“10.9728”已四舍五入为11或   两位有效数字,未转换的信息   数值“36”将会丢失。这是因为RE   数值“11”是±0.5 / 11 =±4.5%,是三倍   未转换数值“36”的±1.4%RE这个例子   因此表明在选择要保留的位数时   转换数量的数值,必须经常选择   在丢弃信息或提供无根据的信息之间。   考虑转换价值的最终用途通常可以帮助一个人   决定做出哪个选择。

     

注意:考虑一个人最初被告知值l = 36   英尺已经四舍五入到最接近的英寸。那么在这种情况下,因为l是   已知在±1 in内,数值“36”的RE为±1   in /(36 ft×12 in / ft)=±0.23%。虽然这小于±   数字11.0的0.45%RE,与之相当。因此,仍然给出结果l = 11.0 m作为转换值。 (注意   数值“10.97”会过分无根据   信息,因为它的RE是±0.23%的五分之一。)

0 个答案:

没有答案