2017-09-19 26 views
2

我有這樣的表達:如何擺脫球拍浮點?

(floor (sqrt 2)) 

計算結果爲:

#i1.0 

如何擺脫浮點位,並將它僅產生1,我怎麼把它轉換爲整型。我看了文檔,但什麼都沒發現。謝謝。

+2

'不確切 - >確切'。 –

+0

謝謝。而已。 – mtheorylord

回答

2

有幾種方法,正如@Alexis指出inexact->exact會這樣做。但是考慮到您使用floor,有一個更簡單的解決方案,,由racket/math(默認包含在#lang racket程序中)提供。

該函數與floor有相同的語義,但有一個例外是它產生一個確切的數字,而不是一個不精確的數字。

> (floor 1.2) 
1.0 
> (exact-floor 1.2) 
1 

當然,它必須注意的是,因爲+inf.0+nan.0(以及相關的變體)僅浮點數和還沒有確切的模擬,你將無法施展那些:

> (floor +inf.0) 
+inf.0 
> (exact-floor +inf.0) 
; exact-floor: contract violation 
; expected: rational? 
; given: +inf.0 
; [,bt for context] 

基本上,floor功能操作real?號碼,而exact-floor操作rational?的號碼。然而,如果你選擇了不精確的路線,你仍然會得到同樣的限制。