问题标签 [significant-digits]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
564 浏览

c# - 为什么使用“G”标准格式字符串格式化 Double 不返回完整字符串?

我希望我已经对此进行了足够的研究,以使我的前提并非完全偏离基础。如果是这样,那么那里的数学家可以让我直截了当。

我的前提是一个Double12.5应该四舍五入到 5 个有效数字(不是小数位)为12.500. 相反,使用以下 C# 代码,我得到12.5

我从 2007 年开始看到这篇文章,这似乎与我的问题相呼应。事实上,我使用这些示例数字只是为了保持一致。

我的目标是更好地理解以下内容:

  • 我对 sig figs 的理解在数学上是否正确?即,我的期望是否合理,或者输出“12.5”是否正确?

  • 这真的是框架中的一个(非常长期存在的)错误吗?如果是这样,可以/会修复吗?

  • 假设这是一个错误,我现在该怎么办?写一个 hack 来确定你实际上得到了多少 sig figs然后填充它?滚动我自己的代码来做“G”格式字符串应该做的事情?我已经在 SO 上遇到过这样的例子,所以这也许是不存在干净选项的证据。

此外,我确实意识到存储问题Double可能会对这个问题的舍入方面产生负面影响,但目前,我只关心 sig figs 比原始数字更多的问题。

编辑:我已经测试到框架 4.5。

0 投票
2 回答
284 浏览

r - 使用具有 2 个有效数字的 formatC 的奇怪输出

我想使用 2 位有效数字格式化数字formatC。但它有一个奇怪的行为。以下是数字:

结果如下:

在案例 5 中,我期望2.0而不是2. . 对此有解释吗?我对参数的定义有什么问题吗?

0 投票
2 回答
4054 浏览

r - 如何确定 R 中数据的有效数字数?

我有一个正在用 R 分析的大型数据集,并且我对一列或一列信息感兴趣。这个向量中的每个条目都有不同数量的有效数字(范围从 1-5),我想对这个向量进行子集化,所以我看不到只有一个有效数字的数据。我可以使用什么样的测试或函数来让 R 报告每个条目的有效数字的数量?我已经研究了 signif() 函数,但这更多的是用于将数据四舍五入到指定数量的有效数字,而不是查询那里有多少 sig figs。

示例:假设我有这个向量:
4
28.382
120
82.3
100
30.0003

我想删除只有一位有效数字的条目。这将是条目 1(值为 4)和条目 5(值为 100)。我知道如何在 R 中对数据进行子集化,但我不知道如何告诉 R “找到”只有一个有效数字的所有值。

0 投票
2 回答
113 浏览

java - 如何在不四舍五入的情况下编写具有 3 个有效数字的字符串

我想要具有 3 个有效数字的转换字符串值。

我正在使用这段代码:

结果是 end= 0.000。但我想得到 end = 0,920。我怎样才能做到这一点?

0 投票
1 回答
949 浏览

sql-server - RODBC 使用 sqlSave 将数字列的精度丢失到 MS SQL(并且在日期上失败)

使用 sqlSave 保存到 ms sql 时,为什么 RODBC 会丢失我的数字列的精度?

数字

在 R 中,我使用数字列创建以下数据框。它们可能看起来已经是圆形的,但这是一个印刷问题,它们不是圆形的。

将其保存到数据库中,似乎表明丢失了一些精度:

通过从数据库中取回数据帧,我们可以验证精度确实丢失了:

float 似乎是正确的列类型,那么有没有办法强制rodbc 使用字符转换的替代方法?即使是默认的 as.character 也可以。

日期

日期类列导致浮点类型的 ms sql 列,导致存储不正确的值:

由于日期被解释为公式:


0 投票
1 回答
157 浏览

r - 限制R中shapefile属性的位数

我需要控制分配给我需要编写的 ESRI shapefile 属性的有效位数。

更新:我使用的是“round()”,但是当我检查 QGIS 属性表中的结果时它似乎不起作用。“问题”实际上可能在 QGIS 中用于小数的表示。比较下面的“表格”视图和“表格”视图:数字是四舍五入的,而不是另一个。

表单视图

表视图

0 投票
0 回答
144 浏览

java - 在java中逗号后用两位有效数字格式化

我正在寻找一个 NumberFormat 配置,该配置的有效数字仅适用于小数部分(而不适用于整数和小数部分)。

以下是以下示例的预期结果(小数部分应用了 2 个有效值):

存在许多使用有效数字格式化的解决方案,但也适用于整数部分。我认为解决方案是使用 DecimalFormat 和 BigDecimal 之间的混合。

感谢您的回答;)

0 投票
2 回答
708 浏览

c - GMP最高有效位

我正在使用 GNU 多精度 (GMP) 库对任意精度整数执行一些计算。然后我需要结果的十进制数字。但不是全部:只是,比方说,一百个最高有效数字(即数字开头的数字)或数字中间的选定数字范围(例如 1000 中的数字 100..200 -数字)。

GMP有什么办法吗?

我在文档中找不到任何函数来提取一系列十进制数字作为字符串。mpz_t转换为字符串的转换函数总是转换整数。只能指定基数,但不能指定起始/结束数字。

除了将整个数字转换成一个巨大的字符串,只取一小部分并扔掉其余部分之外,还有什么更好的方法吗?

编辑:我需要的不是控制我的数字的精度或将其限制为特定的固定位数,而是从任意精度的数字字符串中选择一个数字子集。

这是我需要的一个例子:

7 1316831 = 19821203202357042996...2076482743

实际数字有 1112852 位,我将其收缩到....
现在,我只需要这个庞大的数字字符串中任意选择的子字符串。例如,十个最高有效数字(1982120320在这种情况下)。或者从 1112841到 1112849数字21203202在这种情况下)。或者在第 1112841个位置(2在这种情况下)只有一个数字。

如果我首先用 将我的 GMP 数字转换为一串十进制数字mpz_get_str,我将不得不为这些数字分配大量内存,只使用其中的一小部分并丢弃其余数字。(更不用说mpz_t二进制表示的原始数字已经吃掉了很多。)

0 投票
0 回答
176 浏览

r - 从 chr 到 numeric 的数据表列转换添加小数?

我正在使用一个数据表,它有一列以字符值 ( chr) 开头的结果。因为我需要对其中一些值进行数学计算,所以我复制了原始列,但将非数字值更改为特定的数值。例如,我将 -999 用于“*未报告”的结果值,并为非数字字符设置类似的替代值。其他收集的值是数字,例如 7.3 或 238。结果值因收集中使用的仪器和报告的特征而异。

这是数据表的一个小样本dt(不包括其他列)。

这些RESULT_TRANSLATED值使用 转换dt$RESULT_TRANSLATED <- as.numeric(as.character(dt$RESULT_VALUE))

scipen和的选项值digits分别为 0 和 7。

设置为 0 以强制一列位置标识符(上面未显示的scipen单独列)显示为非科学数字(例如 23434 与 2.3434e04)。Digits设置为 7 以启用记录的字段数据的显示,而不会截断值或降低其有效数字。

我希望看到的是更符合以下转换的结果:

在这里,翻译后的数据反映了结果的重要数字,而不是增加了不存在的准确性。因此,像 0.058 这样的值并不意味着 0.05800 或 0.19 的测量值并不意味着 0.19000 。

不幸的是,我似乎不能吃我的蛋糕(没有 sci-notation 的位置标识符)也不能吃它(在转换的结果值中具有适当的准确性/sig figs)。虽然我可以忽略位置识别科学记数法(可能将其更改为chrnumeric列),但我需要避免更改测量的准确性。

也许有人可以告诉我这是否可能,特别是当结果集包括从不同精度的仪器报告的结果时。我搜索了各种资源并找到了一些相关的主题,但没有什么能完全解决这个问题。

感谢您的帮助/指导。

0 投票
1 回答
168 浏览

matlab - MATLAB 中的浮点误差 - 线性间隔向量

操作系统:Win 7 64 位。Matlab:2014a,2015a

当我按如下方式创建向量时:

我得到:

这是预期的。现在,当我想查看向量中是否存在 0.6 时,我输入:

我得到:0 0 0 0 0

find(a == 0.6)还返回一个Empty matrix: 1-by-0

这些都是意料之外的。它能够找到所有其他值,但是对于 0.6 存在问题。我认为虽然创建了 0.6,但它实际上是 0.600000000000000001 或类似的东西,这是一个问题。你可以看到这是这样的,a > 0.6并且会得到 0 0 1 1 1

1-首先为什么会这样?

2-Second 我们是否能够在 Matlab 中看到一个数字的整个值,如果可以,它的功能或设置是什么?

我使用 创建了相同的向量linspace,但这也没有帮助。我通过键入 : 找到了解决方案 a = roundn(a, -10)。但是,我认为一开始就不需要这样的解决方案。

3-有没有更好的方法来命令 Matlab 产生精确值?

感谢大家的帮助。