标签: significant-digits

舍入到任意数量的有效数字

你怎么能将任何数字(不只是整数> 0)舍入到N位有效数字?

例如,如果我想要舍入到三位有效数字,我正在寻找一个可以采用的公式:

1,239,451并返回1,240,000

12.1257并​​返回12.1

.0681并返回.0681

5并返回5

当然,算法不应该被硬编码为仅处理3的N,尽管这将是一个开始.

algorithm rounding significant-digits

79
推荐指数
6
解决办法
4万
查看次数

将双倍数换算为x有效数字

如果我有一个双(234.004223)等,我想将其舍入为C#中的x位有效数字.

到目前为止,我只能找到舍入到x小数位的方法,但如果数字中有任何0,则只会删除精度.

例如,0.086到一位小数位变为0.1,但我希望它保持在0.08.

c# math rounding significant-digits

66
推荐指数
7
解决办法
6万
查看次数

浮点精度是可变的还是不变的?

我不断得到浮点数(即float,, doublelong double)是否只有一个精度值,或者具有可以变化的精度值的混合答案.

一个名为float vs. double precision的主题似乎暗示浮点精度是绝对的.

然而,另一个叫做float和double之间差异的话题说,

通常,double具有15到16个十进制数字的精度

另一位消息人士

float类型的变量通常具有大约 7位有效数字的精度

double类型的变量通常具有大约 16位有效数字的精度

如果我正在使用敏感代码,当我的值不准确时,我不喜欢引用上面的近似值.所以让我们记录下来吧.浮点精度是可变的还是不变的,为什么?

floating-point binary decimal significant-digits floating-point-precision

38
推荐指数
7
解决办法
2373
查看次数

在C#中格式化具有重要数字的数字

我有一些十进制数据,我将其推入SharePoint列表中进行查看.我想根据我对具体计算的了解来限制结果数据中显示的有效数字的数量.有时候它会是3,所以12345会变成12300而0.012345会变成0.0123.偶尔它会是4或5.有没有方便的方法来处理这个?

c# significant-digits

32
推荐指数
2
解决办法
3万
查看次数

最重要的十进制数字精度是否可以转换为二进制并返回到十进制而不会丢失重要性6或7.225?

我遇到了两种不同的浮点数精度公式.

⌊(N-1)log 10(2)⌋= 6位小数(单精度)

N log 10(2)≈7.225十进制数字(单精度)

其中N = 24个有效位(单精度)

第一个公式位于由W. Kahan教授撰写的" IEEE标准754二进制浮点运算 " 第4页的顶部.

第二个公式可以在维基百科文章" 单精度浮点格式 "的IEEE 754单精度二进制浮点格式:binary32下找到.

对于第一个公式,W.Kahan教授说

如果十进制字符串最多为6 sig.(分解). 转换为Single,然后转换回相同数量的sig.dec.,那么最后的字符串应该与原始字符串匹配.

对于第二个公式,维基百科说

...总精度为24位(相当于log 10(2 24)≈7.225十进制数字).

两个公式(6和7.225十进制数字)的结果是不同的,我希望它们是相同的,因为我假设它们都是为了表示最有效的十进制数字,可以转换为浮点二进制,然后转换回来十进制,其开头的有效十进制数字相同.

为什么这两个数字不同,什么是最重要的十进制数字精度可以转换为二进制并返回到十进制而不会失去重要性?

floating-point binary decimal significant-digits floating-point-precision

21
推荐指数
2
解决办法
2614
查看次数

在SQL中舍入到n个重要数字

我希望能够在SQL中将数字舍入为n个有效数字.所以:

123.456 rounded to 2sf would give 120
0.00123 rounded to 2sf would give 0.0012
Run Code Online (Sandbox Code Playgroud)

我知道ROUND()函数,它舍入到n个小数位而不是有效数字.

sql t-sql sql-server rounding significant-digits

20
推荐指数
1
解决办法
2万
查看次数

我可以使用Python 2.7在matplotlib图的轴上显示小数位和科学记数法吗?

我正在使用python 2.7在pyqt程序中使用matplotlib绘制一些大数字.我的y轴范围从1e + 18到3e + 18(通常).我想看到每个刻度线以科学记数法显示值,并带有2位小数.例如2.35e + 18而不仅仅是2e + 18,因为2e + 18和3e + 18之间的值仍然只读取2e + 18的几个标记.这是一个问题的例子.

import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111)
x = np.linspace(0, 300, 20)
y = np.linspace(0,300, 20)
y = y*1e16
ax.plot(x,y)  
ax.get_xaxis().set_major_formatter(plt.LogFormatter(10,  labelOnlyBase=False))
ax.get_yaxis().set_major_formatter(plt.LogFormatter(10,  labelOnlyBase=False))
plt.show()
Run Code Online (Sandbox Code Playgroud)

python matplotlib significant-digits python-2.7 axis-labels

19
推荐指数
2
解决办法
5万
查看次数

有没有办法获得小数的"有效数字"?

更新

好的,经过一番调查,并且在很大程度上要归功于Jon和Hans提供的有用答案,这就是我能够把它放在一起的.到目前为止,我认为它似乎运作良好.当然,我不打赌我的生活完全正确.

public static int GetSignificantDigitCount(this decimal value)
{
    /* So, the decimal type is basically represented as a fraction of two
     * integers: a numerator that can be anything, and a denominator that is 
     * some power of 10.
     * 
     * For example, the following numbers are represented by
     * the corresponding fractions:
     * 
     * VALUE    NUMERATOR   DENOMINATOR
     * 1        1           1
     * 1.0      10          10
     * 1.012    1012        1000
     * 0.04     4           100
     * 12.01    1201        100
     * …
Run Code Online (Sandbox Code Playgroud)

.net precision decimal significant-digits

17
推荐指数
1
解决办法
3867
查看次数

很好地代表python中的浮点数

我想将一个浮点数表示为一个四舍五入到一些有效数字的字符串,并且从不使用指数格式.基本上,我想显示任何浮点数,并确保它"看起来不错".

这个问题有几个部分:

  • 我需要能够指定有效位数.
  • 有效位数需要变量,使用字符串格式化运算符无法完成.[编辑]我被纠正了; 字符串格式化操作符可以执行此操作
  • 我需要它像一个人期望的那样四舍五入,而不是像1.999999999999那样

我已经想出了这样做的一种方法,虽然它看起来像是一种工作,但它并不完美.(最大精度为15位有效数字.)

>>> def f(number, sigfig):
    return ("%.15f" % (round(number, int(-1 * floor(log10(number)) + (sigfig - 1))))).rstrip("0").rstrip(".")

>>> print f(0.1, 1)
0.1
>>> print f(0.0000000000368568, 2)
0.000000000037
>>> print f(756867, 3)
757000
Run Code Online (Sandbox Code Playgroud)

有一个更好的方法吗?为什么Python没有内置函数呢?

python floating-point significant-digits representation

12
推荐指数
2
解决办法
2万
查看次数

指定 Raku 中序列的显式生成器上的小数位数

我写了一个简单的代码:

\n
sub euler-ex ($x) of Seq {\n   1, { $x**++$ / [\xc3\x97] 1 .. ++$ } ... Inf }\nsay " 5: " ~ euler-ex(5)[^20]  ~ " = " ~ [+](euler-ex(5)[^20]);\n
Run Code Online (Sandbox Code Playgroud)\n

输出:

\n
5: 1 5 12.5 20.833333 26.041667 26.041667 21.701389 15.500992 9.68812 5.382289 2.6911445 1.22324748 0.50968645 0.19603325 0.07001187499 0.023337291662 0.0072929036444 0.00214497166011 0.000595825461143 0.000156796173985 = 148.41310786833832\n
Run Code Online (Sandbox Code Playgroud)\n

如何指定该输出的位数,即来自序列的显式生成器的小数位数?

\n

rational-number sequence significant-digits raku

10
推荐指数
2
解决办法
145
查看次数