destring 18位数字返回舍入错误



我有长度为18的ID作为字符串,我想将它们转换为数字变量。我尝试了以下代码:

destring var, replace

返回具有数字格式的变量。但是,ID的最后一位包含舍入误差。例如:123456789123456000-->123456789123456001

如何在ID没有任何更改的情况下destring我的值?

我无法重现如下所示:

. clear
. set obs 1
number of observations (_N) was 0, now 1
. gen test = "123456789123456000"
. destring, gen(check)
test: all characters numeric; check generated as double
. l
+--------------------------------+
|               test       check |
|--------------------------------|
1. | 123456789123456000   1.235e+17 |
+--------------------------------+
. format check %23.0f
. l
+-----------------------------------------+
|               test                check |
|-----------------------------------------|
1. | 123456789123456000   123456789123456000 |
+-----------------------------------------+

另一种循环方式确实会产生错误;123456789123456001";映射到123456789123456000。本质上,您遇到的是double中可以精确保存的内容,每个数字有8个字节。

相关内容

  • 没有找到相关文章

最新更新