【问题标题】:Stata seemingly not actually rounding with round()Stata 似乎实际上并没有用 round() 四舍五入
【发布时间】:2015-11-02 19:38:08
【问题描述】:

Stata 有一个round() 函数。可以选择四舍五入的单位。我想使用round(ArbitraryValue, 0.01) 将任意浮点值四舍五入到小数点后两位。 Stata 的display 似乎明白这一点。但不知何故,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);

我对如何正确舍入有什么不明白的地方?

【问题讨论】:

    标签: rounding stata


    【解决方案1】:

    你被一个基本事实所困扰。你想看到精确的小数,但 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 了解更多。

    【讨论】:

      猜你喜欢
      • 2010-09-08
      • 2013-04-07
      • 2015-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-12
      • 1970-01-01
      • 2012-08-04
      相关资源
      最近更新 更多