parseFloat(1.51e-6);
// returns 0.00000151
parseFloat(1.23e-7);
// returns 1.23e-7
// required 0.000000123
Run Code Online (Sandbox Code Playgroud)
我正在对包含各种浮点数的表列进行排序,其中一些以科学计数法表示.
我正在使用jQuery tablesorter2.0插件,它使用'parseFloat'来表示以数字开头的单元格.问题是parseFloat返回表示为1.23e-7的非常小的数字作为字符串,而不是将其扩展为0.000000123.因此,tablesorter将列的内容排序为文本而不是数字.
Run Code Online (Sandbox Code Playgroud)**Column To Sort** 2.34 1.01 13.56 1.23e-7 **After Sort Now** 1.01 1.23e-7 13.56 2.34 **Expect** 1.23e-7 1.01 2.34 13.56
是否有一种有效的方法可以将非常小的科学记数表示为扩展的浮点数?
解:
tablesorter根据第一个tablesorters自动解析器确定如何对列进行排序,以便为该列中单元格的内容返回true.如果单元格包含1.23e-7而不是默认按文本排序,因为'digit'解析器不会将其解释为数字.
因此,要解决此问题,以下代码将科学记数法编号表示为tablesorter可以解释/解析为数字的字符串,从而确保对列进行数字排序.@bitplitter - 感谢toFixed()提示.
var s = "1.23e-7";
// Handle exponential numbers.
if (s.match(/^[-+]?[1-9]\.[0-9]+e[-]?[1-9][0-9]*$/)) {
s = (+s).toFixed(getPrecision(s));
}
//returns 0.000000123
// Get a nice decimal place precision for the scientific notation number.
// e.g. 1.23e-7 yields 7+2 places after the decimal point
// e.g. …Run Code Online (Sandbox Code Playgroud) 我正在创建一个函数来返回十进制和整数位数,并typename使用sstreams 将插入的数字转换为字符串.
但是,转换为字符串时的数字用科学记数法表示,这对于计算正常数字中的数字位数没有用.如何在下面的函数中阻止这种情况发生?
enum { DECIMALS = 10, WHOLE_NUMBS = 20, ALL = 30 };
template < typename T > int Numbs_Digits(T numb, int scope)
{
stringstream ss(stringstream::in | stringstream::out);
stringstream ss2(stringstream::in | stringstream::out);
unsigned long int length = 0;
unsigned long int numb_wholes;
ss2 << (int) numb;
numb_wholes = ss2.str().length();
ss2.flush();
bool all = false;
switch (scope) {
case ALL:
all = true;
case DECIMALS:
ss << numb;
length += ss.str().length() - (numb_wholes + 1); …Run Code Online (Sandbox Code Playgroud) 我使用openrowset将csv文件导入SQL Server.csv文件中的一列包含科学记数法(1.08E + 05)中的数字以及正在插入的表中的列
默认情况下,它将值导入为1并忽略.08E + 05.
我已经尝试使用cast()和convert()在执行查询时直接转换值,并在表中将数据类型设置为字符串并将其导入.所有这些方法都具有相同的行为,其中.08E + 05被忽略.
有没有办法让值导入为108000而不是没有.08E + 05的1而不必更改csv文件本身?
将数据类型设置为varchar并读入csv文件似乎与以下代码具有相同的效果:
CREATE TABLE #dataTemp (StartDate datetime, Value varchar(12))
SET @insertDataQuery = 'SELECT Date, CSVValue from OpenRowset(''MSDASQL'', ''Driver={Microsoft Text Driver (*.txt; *.csv)}; DefaultDir='
SET @insertDataQuery = @insertDataQuery + 'C:\Data\;'',''SELECT * FROM '+ '11091800.csv' + ''')'
INSERT INTO #dataTemp EXEC(@insertDataQuery)
SELECT * FROM #dataTemp
Run Code Online (Sandbox Code Playgroud)
并非CSV文件中的所有值都具有科学记数法,没有它的值,例如81000没有问题.
如何将科学记数法中的数字分配给C#中的变量?
我想使用Plancks Constant,即6.626 X 10 -34
这是我的代码,这是不正确的:
Decimal PlancksConstant = 6.626 * 10e-34;
Run Code Online (Sandbox Code Playgroud) 这个问题不是寻求开发人员代码格式化意见.就个人而言,我更喜欢在我的JS代码中使用科学记数法,因为我相信它更具可读性.对我来说,6e8更具可读性600000000.话虽这么说,我只是在寻找JS中用科学记数法指定数字的潜在风险和缺点.我不经常在野外看到它,并且想知道是否有技术推理,或仅仅是因为开发人员的笨蛋.
在JSON网站在这里,它解释了JSON"对象"的不同的可能性.但是,在数字部分,这些出现:
e | e+ | e- | E| E+| E-
1 - 这些代表什么?
在寻找答案时,<E>出现了很多.
2 -是否<E>与上述有关e| ES'
我一直在使用预期结果将成为的PHP代码:
1
101
10001
1000001
100000001
10000000001
1000000000001
100000000000001
10000000000000001
1000000000000000001
最后输出是:
1
101
10001
1000001
100000001
10000000001
1000000000001 //(10亿)到(1000亿 - 1)仍显示实际数字,然后是
1.0E + 14
1.0E + 16
1.0E + 18
我在那里找到了一些解决方案!他们通过使用sprintf或尝试format_number说.我试过了两个.
使用sprintf和结果:
$format_x = sprintf("%.0f ",$x);
echo $format_x.$br;
Run Code Online (Sandbox Code Playgroud)
1
101
10001
1000001
100000001
10000000001
1000000000001
100000000000001
10000000000000000
1000000000000000000
使用format_number和结果:
echo number_format($x, 0).$br;
Run Code Online (Sandbox Code Playgroud)
1
101
10,001
1,000,001
100,000,001
10,000,000,001
1,000,000,000,001
100,000,000,000,001
10,000,000,000,000,000
1,000,000,000,000,000,000,000
但它仍然没有显示实际的大数字.好吧,这两种方式看起来不错,但它不符合我的要求.有人能解决这个问题吗?
我试图回答一个问题(后来被删除),我认为这是在询问提取科学记数法的文本表示.(使用R的regex实现,需要对元字符进行双重转义,并且可以在纯PCRE或Perl模式中使用,我之间的差异我并不真正理解.)我已经解决了大部分任务但仍然似乎无法捕获捕获组中的前导减号.我似乎唯一能让它成功的方法是使用前导的开括号:
> txt <- c("this is some random text (2.22222222e-200)", "other random (3.33333e4)", "yet a third(-1.33333e-40)", 'and a fourth w/o the "e" (2.22222222-200)')
> sub("^(.+\\()([-+]{0,1}[0-9][.][0-9]{1,16}[eE]*[-+]*[0-9]{0,3})(.+$)", "\\2" ,txt)
[1] "2.22222222e-200" "3.33333e4" "-1.33333e-40" "2.22222222-200"
> sub("^(.+\\()([-+]?[0-9][.][0-9]{1,16}[eE]*[-+]*[0-9]{0,3})(.+$)", "\\2" ,txt)
[1] "2.22222222e-200" "3.33333e4" "-1.33333e-40" "2.22222222-200"
#but that seems to be "cheating" ... my failures follow:
> sub("^(.+)([-+]?[0-9][.][0-9]{1,16}[eE]*[-+]*[0-9]{0,3})(.+$)", "\\2" ,txt)
[1] "2.22222222e-200" "3.33333e4" "1.33333e-40" "2.22222222-200"
> sub("^(.+)(-?[0-9][.][0-9]{1,16}[eE]*[-+]*[0-9]{0,3})(.+$)", "\\2" ,txt)
[1] "2.22222222e-200" "3.33333e4" "1.33333e-40" "2.22222222-200"
> sub("^(.+)(-*[0-9][.][0-9]{1,16}[eE]*[-+]*[0-9]{0,3})(.+$)", "\\2" ,txt)
[1] "2.22222222e-200" "3.33333e4" "1.33333e-40" "2.22222222-200"
Run Code Online (Sandbox Code Playgroud)
我用"科学记数法正则表达式减去"之类的术语来搜索我的耐心程度
我放入.describe()一个数据框,输出看起来不太好。我希望输出显示整数,而不是用指数简化。
输入:
df["A"].describe()
Run Code Online (Sandbox Code Playgroud)
输出的样子:
count 6.000000e+01
mean 7.123568e+04
std 2.144483e+05
min 1.000000e+02
25% 2.770080e+03
50% 1.557920e+04
75% 4.348470e+04
max 1.592640e+06
Name: A, dtype: float64
Run Code Online (Sandbox Code Playgroud)
预期输出:
count 60.0
mean 7123.568
std 214448.3
min 100.0000
25% 2770.080
50% 15579.20
75% 43484.70
max 1592640.0
Name: A, dtype: float64
Run Code Online (Sandbox Code Playgroud) 当以科学格式显示数字时,我还没有找到一种方法只获取 3 的倍数的指数。我也没有成功编写一个简单的自定义格式化函数。
这是一个简单的例子:
使用 python 的科学记数法的正常行为.format():
numbers = [1.2e-2, 1.3e-3, 1.5e5, 1.6e6]
for n in numbers:
print("{:.E}".format(n))
Run Code Online (Sandbox Code Playgroud)
>>> 1.20E-02
1.30E-03
1.50E+05
1.60E+06
Run Code Online (Sandbox Code Playgroud)
但是,我需要以下输出:
>>> 12.00E-03
1.30E-03
15.00E+06
1.60E+06
Run Code Online (Sandbox Code Playgroud)
有谁知道我获得所需格式的便捷方法?
javascript ×2
python ×2
c# ×1
c++ ×1
dataframe ×1
format ×1
json ×1
openrowset ×1
pandas ×1
parsefloat ×1
php ×1
printing ×1
r ×1
regex ×1
sql-server ×1
stringstream ×1
syntax ×1