2015-07-21 74 views
8

我想将Double舍入到小数点后总是四舍五入的整数。在swift中向下舍入

四舍五入至0.00 => 1.5679999至1.56

四舍五入至0.000 => 1.5679999至1.567

round(1.5679999 * 100)/100 //returns 1.57 
round(1.5679999 * 1000)/1000 //returns 1.568 

我想要一个双不级联字符串

+0

目的是什么?如果要显示给用户,则应该使用“NSNumberFormatter”。您不应该依赖任意浮点精度来格式化字符串。 – mattt

+0

因为'NSNumberFormatter'不会改变底层的值,所以只给用户显示一个String。 #ifeellikemosesonthemountaintalkingtoyou。 – Mika

+0

更多细节:我正在设计一个带有退格按钮的自定义数字键盘。当用户点击退格键时,他们不仅希望数字从屏幕上消失,而且还会从输入的值中消失。这就是我的做法:'amount/= 10''amount = floor(amount * 100)/ 100''refreshAmountLabel()'。建议欢迎! – Mika

回答

24

只需用替换floor即可!

+2

我觉得很愚蠢,没有发现... – gnasher729

+3

'地板(1.5679999 * 1000)/ 1000 == 1.5669999999999999''。你不能划分和乘以一个浮点数来可靠地改变它的精度。 – mattt

+0

绝对,谢谢指出! PS - 我爱你Mattt! :)想知道你最近做了什么。对你多年来为iOS社区做出的所有杰出贡献给予了巨大的尊重。 – Clafou

15

由于SWIFT 3.0:

myDouble.rounded(.down) 
+1

有时候可以这么简单!谢谢。 – Lengo