问题标签 [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.
c# - 为什么使用“G”标准格式字符串格式化 Double 不返回完整字符串?
我希望我已经对此进行了足够的研究,以使我的前提并非完全偏离基础。如果是这样,那么那里的数学家可以让我直截了当。
我的前提是一个Double
值12.5
应该四舍五入到 5 个有效数字(不是小数位)为12.500
. 相反,使用以下 C# 代码,我得到12.5
:
我从 2007 年开始看到这篇文章,这似乎与我的问题相呼应。事实上,我使用这些示例数字只是为了保持一致。
我的目标是更好地理解以下内容:
我对 sig figs 的理解在数学上是否正确?即,我的期望是否合理,或者输出“12.5”是否正确?
这真的是框架中的一个(非常长期存在的)错误吗?如果是这样,可以/会修复吗?
假设这是一个错误,我现在该怎么办?写一个 hack 来确定你实际上得到了多少 sig figs然后填充它?滚动我自己的代码来做“G”格式字符串应该做的事情?我已经在 SO 上遇到过这样的例子,所以这也许是不存在干净选项的证据。
此外,我确实意识到存储问题Double
可能会对这个问题的舍入方面产生负面影响,但目前,我只关心 sig figs 比原始数字更多的问题。
编辑:我已经测试到框架 4.5。
r - 使用具有 2 个有效数字的 formatC 的奇怪输出
我想使用 2 位有效数字格式化数字formatC
。但它有一个奇怪的行为。以下是数字:
结果如下:
在案例 5 中,我期望2.0而不是2. . 对此有解释吗?我对参数的定义有什么问题吗?
r - 如何确定 R 中数据的有效数字数?
我有一个正在用 R 分析的大型数据集,并且我对一列或一列信息感兴趣。这个向量中的每个条目都有不同数量的有效数字(范围从 1-5),我想对这个向量进行子集化,所以我看不到只有一个有效数字的数据。我可以使用什么样的测试或函数来让 R 报告每个条目的有效数字的数量?我已经研究了 signif() 函数,但这更多的是用于将数据四舍五入到指定数量的有效数字,而不是查询那里有多少 sig figs。
示例:假设我有这个向量:
4
28.382
120
82.3
100
30.0003
我想删除只有一位有效数字的条目。这将是条目 1(值为 4)和条目 5(值为 100)。我知道如何在 R 中对数据进行子集化,但我不知道如何告诉 R “找到”只有一个有效数字的所有值。
java - 如何在不四舍五入的情况下编写具有 3 个有效数字的字符串
我想要具有 3 个有效数字的转换字符串值。
我正在使用这段代码:
结果是 end= 0.000。但我想得到 end = 0,920。我怎样才能做到这一点?
sql-server - RODBC 使用 sqlSave 将数字列的精度丢失到 MS SQL(并且在日期上失败)
使用 sqlSave 保存到 ms sql 时,为什么 RODBC 会丢失我的数字列的精度?
数字
在 R 中,我使用数字列创建以下数据框。它们可能看起来已经是圆形的,但这是一个印刷问题,它们不是圆形的。
将其保存到数据库中,似乎表明丢失了一些精度:
通过从数据库中取回数据帧,我们可以验证精度确实丢失了:
float 似乎是正确的列类型,那么有没有办法强制rodbc 使用字符转换的替代方法?即使是默认的 as.character 也可以。
日期
日期类列导致浮点类型的 ms sql 列,导致存储不正确的值:
由于日期被解释为公式:
java - 在java中逗号后用两位有效数字格式化
我正在寻找一个 NumberFormat 配置,该配置的有效数字仅适用于小数部分(而不适用于整数和小数部分)。
以下是以下示例的预期结果(小数部分应用了 2 个有效值):
存在许多使用有效数字格式化的解决方案,但也适用于整数部分。我认为解决方案是使用 DecimalFormat 和 BigDecimal 之间的混合。
感谢您的回答;)
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
二进制表示的原始数字已经吃掉了很多。)
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)。虽然我可以忽略位置识别科学记数法(可能将其更改为chr
一numeric
列),但我需要避免更改测量的准确性。
也许有人可以告诉我这是否可能,特别是当结果集包括从不同精度的仪器报告的结果时。我搜索了各种资源并找到了一些相关的主题,但没有什么能完全解决这个问题。
感谢您的帮助/指导。
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 产生精确值?
感谢大家的帮助。