rounding - Stata 似乎实际上并未使用 round() 进行舍入

标签 rounding stata

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);

关于如何正确舍入,我不明白什么?

最佳答案

你被一个基本事实所困扰。你想看到精确的小数,但 Stata 在这里不使用精确的小数;它必然以二进制计算。大多数时候,多个层面上的独创性都将这一点隐藏起来,但偶尔它也会暴露出来。

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

从这个意义上说,只有在特殊情况下,round() 才能达到您的预期,产生 0.01 的精确倍数。

display引起的计算是这一原则的异常(exception);只是默认的显示格式通常会向您隐藏丑陋的事实。

你想要的实际上是一个字符串操作,即具有指定格式的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

搜索精度以了解更多信息。

关于rounding - Stata 似乎实际上并未使用 round() 进行舍入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33485494/

相关文章:

c# - 如何防止 C# 端的 SQL 舍入小数 (18,4) 输出

Python - 如何为 Decimal.quantize 定义舍入比例

stata - Stata 的替代 IDE

python - 从 Python 运行 Stata 并确保没有错误

stata - r(109) 错误消息 代码 迭代字符串中的数字

excel - 用 stata 循环填充输出向量

Python - 按四分之一间隔舍入

python - 在 Python 中四舍五入到给定的数字

将数字四舍五入到前 3 位数字(以数字开头!= 0)

r - 在双边案例交叉设计中创建控制日期