你正在被一個基本事實所咬。你想看精確的小數,但Stata在這裏不使用精確的小數;它必須以二進制計算。大多數時候,多個層次上的聰明才智掩蓋了這一點,但偶爾也會突破到表層。
round()
無法找到99.99的確切二進制表示,因爲沒有一個。這同樣適用於0.1(0.1)0.9的任何倍數或分數,除了某些倍數或0.5的分數。
從這個意義上說,只有例外情況round()
可以做你所期望的,產生0.01的精確倍數。
由display
引起的計算是而不是這個原理的例外;這只是默認的顯示格式通常會隱藏你的醜陋的真相。
你想要的是實際上是一個字符串操作,即display
與指定的格式,如%3.2f
這將保證Stata認爲它看到兩位小數。
. sysuse auto, clear
(1978 Automobile Data)
. local LevelA = 99.98765432123321
. local myLevelA : di %3.2f `LevelA'
. ttest mpg == 20, level(`mylevelA')
One-sample t test
------------------------------------------------------------------------------
Variable | Obs Mean Std. Err. Std. Dev. [95% Conf. Interval]
---------+--------------------------------------------------------------------
mpg | 74 21.2973 .6725511 5.785503 19.9569 22.63769
------------------------------------------------------------------------------
mean = mean(mpg) t = 1.9289
Ho: mean = 20 degrees of freedom = 73
Ha: mean < 20 Ha: mean != 20 Ha: mean > 20
Pr(T < t) = 0.9712 Pr(|T| > |t|) = 0.0576 Pr(T > t) = 0.0288
search precision
瞭解更多。
我希望我可以雙倍投票給你! (特別是對於'精確'提示。)感謝您將二進制表示形式帶回家。 :) – Alexis
謝謝你。如果你感到慷慨,你可以找一個值得讚賞的帖子。 (但不能再更改;一個人的系列upvoting被自動檢測並反轉。) –