2015-07-21 46 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