你怎么能将任何数字(不只是整数> 0)舍入到N位有效数字?
例如,如果我想要舍入到三位有效数字,我正在寻找一个可以采用的公式:
1,239,451并返回1,240,000
12.1257并返回12.1
.0681并返回.0681
5并返回5
当然,算法不应该被硬编码为仅处理3的N,尽管这将是一个开始.
如果我有一个双(234.004223)等,我想将其舍入为C#中的x位有效数字.
到目前为止,我只能找到舍入到x小数位的方法,但如果数字中有任何0,则只会删除精度.
例如,0.086到一位小数位变为0.1,但我希望它保持在0.08.
我不断得到浮点数(即float
,, double
或long double
)是否只有一个精度值,或者具有可以变化的精度值的混合答案.
一个名为float vs. double precision的主题似乎暗示浮点精度是绝对的.
然而,另一个叫做float和double之间差异的话题说,
通常,double具有15到16个十进制数字的精度
另一位消息人士称
float类型的变量通常具有大约 7位有效数字的精度
double类型的变量通常具有大约 16位有效数字的精度
如果我正在使用敏感代码,当我的值不准确时,我不喜欢引用上面的近似值.所以让我们记录下来吧.浮点精度是可变的还是不变的,为什么?
floating-point binary decimal significant-digits floating-point-precision
我有一些十进制数据,我将其推入SharePoint列表中进行查看.我想根据我对具体计算的了解来限制结果数据中显示的有效数字的数量.有时候它会是3,所以12345会变成12300而0.012345会变成0.0123.偶尔它会是4或5.有没有方便的方法来处理这个?
我遇到了两种不同的浮点数精度公式.
⌊(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
我希望能够在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个小数位而不是有效数字.
我正在使用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) 好的,经过一番调查,并且在很大程度上要归功于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) 我想将一个浮点数表示为一个四舍五入到一些有效数字的字符串,并且从不使用指数格式.基本上,我想显示任何浮点数,并确保它"看起来不错".
这个问题有几个部分:
我已经想出了这样做的一种方法,虽然它看起来像是一种工作,但它并不完美.(最大精度为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没有内置函数呢?
我写了一个简单的代码:
\nsub 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输出:
\n5: 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如何指定该输出的位数,即来自序列的显式生成器的小数位数?
\ndecimal ×3
rounding ×3
binary ×2
c# ×2
python ×2
.net ×1
algorithm ×1
axis-labels ×1
math ×1
matplotlib ×1
precision ×1
python-2.7 ×1
raku ×1
sequence ×1
sql ×1
sql-server ×1
t-sql ×1