2012-07-09 57 views
1

我不知道這是一個問題或者它的方式,但我需要一個2位小數的值。我可以編寫一個函數來將它舍入到2個小數位,但有一個解決方案,clojure自己在添加時處理它。我的意思是通過改變數據類型或其他。爲什麼加入1.00,2.00在clojure中總是給我3.0?

謝謝。

回答

5

Clojure在引擎蓋下使用java的雙精度浮點數(從1.3開始),並且REPL僅打印儘可能多的數字,因爲它需要表示數字,所以在這種情況下,它正在創建3.0000000 ...但刪除不必要的數字。

您可以使用便利的format功能控制打印的號碼。

(format "%.2f" (+ 1.0 2.0)) 
> "3.00" 
+0

我不使用REPL在這裏,我使用noir服務器,並在響應我得到這個.. – ngesh 2012-07-09 06:30:23

+0

格式功能也將解決它在那裏。這是打印數字太少的重新打印。在這個答案中的鏈接涵蓋了很多方法來讓數字格式化以適應大多數需求。 – 2012-07-09 06:31:51

+0

但這並不解決我的問題..我不想在這裏的函數調用...但感謝您的快速重播.. – ngesh 2012-07-09 06:35:05

5

3.0是等於3.00 Clojure中,是雙,如果你想輸出中一個海峽有2位小數,你可以使用的格式。

user> (= 3.0 3.00) 
true 
user> (== 3.0 3.00) 
true 
user> (format "%.2f" 3.0) 
"3.00" 
user> (class 3.00) 
java.lang.Double 
2

如果您需要做精確的十進制算法可以用一個「M」後綴寫入數字來表明它們是精確:

user=> (+ 1.00M 2.00M) 
3.00M 

但要注意,這比使用效率要低得多標準的不精確浮點數。

+0

,看起來真的很棒..正是我想要的... – ngesh 2012-07-11 04:46:07

相關問題