Rounding Stata似乎没有实际使用round()进行舍入

Rounding Stata似乎没有实际使用round()进行舍入,rounding,stata,Rounding,Stata,Stata有一个round()函数。您可以选择它要舍入的单位。我想使用round(ArbitraryValue,0.01)将任意浮点值四舍五入到小数点后两位。斯塔塔的显示屏似乎明白这一点。但不知何故,round(ArbitraryValue,0.01)的内部表示形式仍然具有未舍入的浮点值: . local LevelA = 99.98765432123321 . ttest mpg==20, level(`LevelA') <BR> level() can have at most

Stata有一个
round()
函数。您可以选择它要舍入的单位。我想使用
round(ArbitraryValue,0.01)
将任意浮点值四舍五入到小数点后两位。斯塔塔的
显示屏
似乎明白这一点。但不知何故,
round(ArbitraryValue,0.01)
的内部表示形式仍然具有未舍入的浮点值:

. local LevelA = 99.98765432123321

. ttest mpg==20, level(`LevelA') <BR>
level() can have at most two digits after the decimal point <BR>
r(198);

. local LevelB = round(`LevelA',0.01)

. di `LevelB' <BR>
99.99

. ttest mpg==20, level(`LevelB') <BR>
level() must be between 10 and 99.99 inclusive <BR>
r(198);

. set trace on

. ttest mpg==20, level(`LevelB') <BR>

[SNIP]<BR>
 = local 0 mpg = 20, level(**99.99000000000001**) <BR>
[SNIP] <BR>
r(198);
。本地水平A=99.98765432123321
. t测试mpg==20,级别('LevelA')
level()在小数点后最多可以有两位数字
r(198); . 本地LevelB=圆形(`LevelA',0.01) . 二级B级
99.99 . t测试mpg==20,水平('LevelB')
级别()必须介于10和99.99之间(含10和99.99)
r(198); . 设置跟踪 . t测试mpg==20,水平('LevelB')
[剪断]
=本地0 mpg=20,级别(**99.9900000000001**)
[剪断]
r(198);

关于如何正确轮换,我有什么不明白的吗?

你被一个基本事实咬了一口。你想看到精确的小数,但斯塔塔在这里不使用精确的小数;它必须以二进制计算。在多个层次上的许多独创性在大多数情况下都会对您隐藏这一点,但偶尔它会突破到表面

round()
不可能找到99.99的精确二进制表示形式,因为没有。这同样适用于0.1(0.1)0.9的任何倍数或分数,但某些倍数或分数为0.5的情况除外

从这个意义上讲,只有在例外情况下,
round()
才能按您的期望生成0.01的精确倍数

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
。系统使用自动,清除
(1978年汽车数据)
. 本地水平A=99.98765432123321
. 本地MyLevel A:di%3.2f`LevelA'
. t测试mpg==20,级别(`MyLevel'a)
单样本t检验
------------------------------------------------------------------------------
变量| Obs平均标准误差。标准偏差【95%配置间隔】
---------+--------------------------------------------------------------------
mpg | 74 21.2973.6725511 5.785503 19.9569 22.63769
------------------------------------------------------------------------------
平均值=平均值(mpg)t=1.9289
平均值=20自由度=73
平均值<20公顷:平均值!=20公顷:平均>20公顷
Pr(TT)=0.0576 Pr(T>T)=0.0288
搜索精度
以了解更多信息