标签: scientific-notation

格式化输出

我需要以科学计数法输出数字,这样小数点前总是有一个"0".

例如,对于数字x = 134.87546,我需要产生输出0.134875E03 NOT 1.348755E02

有人知道怎么做吗?

在此先感谢 - 希拉兹.

c++ formatting scientific-notation

5
推荐指数
1
解决办法
232
查看次数

有没有办法在Javascript中截断科学记数字?

众所周知,因为它是关于SO的最常见的主题之一,我遇到了舍入错误的问题(实际上并不是错误,我很清楚).我不会解释我的观点,而是举例说明我可能拥有的数字以及我希望能够获得的输入:

让我们说吧

var a = 15 * 1e-9;
alert(a)
Run Code Online (Sandbox Code Playgroud)

输出

1.5000000000000002e-8
Run Code Online (Sandbox Code Playgroud)

我希望能够获得1.5e-8,但我不能只乘以10e8,舍入并除以10e8,因为我不知道它是e-8还是e-45或其他任何东西.

所以基本上我希望能够获得该1.5000002部分,应用toFixed(3)并放回指数部分.

我可以转换成字符串和解析,但它似乎不正确...

任何的想法 ?


(如果你觉得这是重复的一个,我提前道歉,但我找不到类似的问题,只有相关问题)

盖尔

javascript floating-point rounding-error scientific-notation rounding

5
推荐指数
1
解决办法
2195
查看次数

matlab科学记谱法问题

我有一个问题,如'313397E9'等8位数字符串被传入excel,然后读作数字'313397000000000'或'3.133970e + 014'.

然后由Matlab读取并将其识别为数字,而不是字符串.将它转换回8位数字符串的最简单方法是什么?

在此先感谢您的帮助.

matlab scientific-notation

5
推荐指数
1
解决办法
4535
查看次数

Java中的紧凑数字格式化行为(自动在十进制和科学记数法之间切换)

我正在寻找一种以标准十进制格式或科学计数法动态格式化浮点数的方法,具体取决于数字的值.

  • 对于中等大小,数字应格式化为十进制,并且尾随零被抑制.如果浮点数等于整数值,则还应该抑制小数点.
  • 对于极端量级(非常小或非常大),数字应以科学记数法表示.或者说,如果表达式中的字符数作为标准十进制表示法超过某个阈值,请切换到科学计数法.
  • 我应该控制精度的最大位数,但我不希望附加尾随零来表示最小精度; 应该抑制所有尾随零.

基本上,它应该优化紧凑性和可读性.

2.80000 - > 2.8

765.000000 - > 765

0.0073943162953- > 0.00739432(限制精度数字 - 在这种情况下为6)

0.0000073943162953- > 7.39432E-6(如果幅度足够小,则切换到科学记数法 - 比1E-5这种情况要少)

7394316295300000- > 7.39432E+6(如果幅度足够大,则切换到科学记数法 - 例如,当大于时1E+10)

0.0000073900000000- > 7.39E-6(用科学记数法从有效数据中删除尾随零)

0.000007299998344- > 7.3E-6(从6位精度限制舍入导致此数字具有被剥离的尾随零)


这是我到目前为止所发现的:

  • .toString()Number类的方法完成了我想要的大部分工作,除非它尽可能不转换为整数表示,并且它不会用科学计数法表示大的积分量.另外,我不确定如何调整精度.
  • 该函数的"%G"格式字符串String.format(...)允许我以科学计数法表示数字,可调精度,但不会删除尾随零.

我想知道是否已经有一些符合这些标准的库函数.我想自己写这篇文章的唯一绊脚石就是必须从科学记数法中删除有效数字的尾随零%G.

java scientific-notation string-formatting

5
推荐指数
1
解决办法
1638
查看次数

将小(1.0E-12)数字存储为科学计数法的双精度数

这是设置:

对于我的学士论文,我想测试大型强子对撞机使用的喷射算法.基本上第一步是下面的步骤:给出一些4动量

p[0] = nullvector(45.0000000000106,33.03951484238976,14.97124733712793,26.6317895033428)
Run Code Online (Sandbox Code Playgroud)

我想通过在10 ^( - 12)的顺序中将一些(如50个)随机生成的4向量添加到最后三个组件来模拟实验数据,这样它们就很小(这就是有趣物理发生的地方),但是显着高于15位小数的双浮点精度.因此,快速而肮脏的解决方案如下:

seed=time(NULL);
srand(seed);
random=(rand()%9001)*1.0E-15;
random=random+1E-12;
printf("%.15E\n",random);
Run Code Online (Sandbox Code Playgroud)

这给出了1E-12和10E-12(= 1E-11)之间的随机数,最大值为三位小数,因此在"实际"双精度数中,这给出了15位小数.

现在到了这一点:我可以按顺序存储数字超过三位小数而不超出双浮点精度吗?

PS:有没有更好的方法来生成小的随机数?(这听起来像另一个主题;))

c double scientific-notation

5
推荐指数
1
解决办法
888
查看次数

科学记数法转换 - 计划

我试图对两个非常大的数字进行简单的减法运算.

(- 1.8305286640724363e+023 (floor 1.8305286640724363e+023))
Run Code Online (Sandbox Code Playgroud)

当我这样做时,我得到0.0的结果.我期待输出:

(- 1.8305286640724363e+023 (floor 1.8305286640724363e+023)) => .2439521
Run Code Online (Sandbox Code Playgroud)

扩展的科学记数法会给我答案.

183052866407243622723319.24395251 - 183052866407243622723319.00 = .2439521

我想用这些数字来表示这些数字,使用十进制数字,而不是科学记数法,所以我可以达到预期的结果.在Scheme中有没有办法做到这一点?任何帮助,指导或参考将不胜感激:)

我正在使用DrRacket for Windows 64bit和R5RS Language.

编辑

我想我会尽可能具体地说明我正在执行的算术的例子.

算术:

(* 271979577247970257395 0.6180339887) => 1.6809262297150285e+020
Run Code Online (Sandbox Code Playgroud)

当在计算器中进行相同的乘法时,结果yeilds => 168092622971502827156.7975214365

当试图使用精确或不精确时我得到这个:

(exact (* 271979577247970257395 0.6180339887)) => exact: undefined;
(inexact (* 271979577247970257395 0.6180339887)) => inexact: undefined;
Run Code Online (Sandbox Code Playgroud)

我想R5RS不支持精确/不精确?我查了一下,示例显示使用不精确 - >精确的程序所以我做了并得到了这个:

(inexact->exact (* 271979577247970257395 0.6180339887)) => 168092622971502854144
Run Code Online (Sandbox Code Playgroud)

仅仅为了特异性,我做了相反的事情:

(exact->inexact (* 271979577247970257395 0.6180339887)) => 1.6809262297150285e+020
Run Code Online (Sandbox Code Playgroud)

所以我尝试使用Big Float,就像有人提到的那样:

(bf-precision 128)
(bf (* 271979577247970257395 0.6180339887)) => (bf 168092622971502854144)
Run Code Online (Sandbox Code Playgroud)

给我完全相同的输出.我只想要保存得到我从计算器得到的数字,这似乎是一项非常艰巨的任务!对不起,我可能因为没有得到这个而听起来很愚蠢,请记住我在计划中是一个极端的业余爱好者.再次感谢你的帮助!:)

scheme scientific-notation arithmetic-expressions racket

5
推荐指数
1
解决办法
1344
查看次数

从字符串中提取科学数字

我试图从文本文件中的行中提取科学数字.就像是

例:

str = 'Name of value 1.111E-11   Next Name 444.4'
Run Code Online (Sandbox Code Playgroud)

结果:

[1.111E-11, 444.4]
Run Code Online (Sandbox Code Playgroud)

我在其他帖子中尝试过解决方案,但它看起来只适用于整数(可能)

>>> [int(s) for s in str.split() if s.isdigit()]
[]
Run Code Online (Sandbox Code Playgroud)

float()可以工作,但每次使用字符串时都会出错.

>>> float(str.split()[3])
1.111E-11
>>> float(str.split()[2])
ValueError: could not convert string to float: value
Run Code Online (Sandbox Code Playgroud)

在此先感谢您的帮助!!

python string floating-point scientific-notation

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

在C语言中阅读科学记数法

我正在尝试读取具有以下内容的文件:

1.0000000e + 01 2.9265380e + 03 5.0821200e + 02 4.3231640e + 01

2.0000000e + 01 1.0170240e + 04 9.2798610e + 02 4.0723180e + 01

3.0000000e + 01 2.1486260e + 04 1.1832420e + 03 1.0328000e + 01

4.0000000e + 01 3.3835080e + 04 1.1882285e + 03 -9.3307000e + 00

5.0000000e + 01 4.5250830e + 04 1.0899705e + 03 -1.0320900e + 01

6.0000000e + 01 5.5634490e + 04 9.8935650e + 02 -9.8019000e + 00

7.0000000e + 01 6.5037960e + 04 8.9134700e …

c scientific-notation

5
推荐指数
1
解决办法
8091
查看次数

以科学格式打印double,没有整数部分

一个简单的问题,但我无法获得有关这种格式的文档:我想以Fortran科学记数法打印浮点数,其整数部分始终为零.

 printf("%0.5E",data); // Gives 2.74600E+02
Run Code Online (Sandbox Code Playgroud)

我想像这样打印:

 .27460E+03
Run Code Online (Sandbox Code Playgroud)

如何让这个结果尽可能干净?

c double scientific-notation

5
推荐指数
1
解决办法
197
查看次数

为什么1e400不是int?

为什么科学记数法中的数字总是被读作a float,如何将像'1e400'这样的字符串转换为a int(对于a来说太大了float)?

>>>int('1e400') 
ValueError: invalid literal for int() with base 10: '1e400'
>>>int(float('1e400'))
OverflowError: cannot convert float infinity to integer
Run Code Online (Sandbox Code Playgroud)

我知道,我可以做一个像这样的功能:

def strtoint(string):
  parts = string.split('e')
  if len(parts) == 1:
    return int(string)
  elif len(parts) == 2:
    if int(parts[1])<0:
      return int(string)
    return int(parts[0])*10**int(parts[1])
  else:
    return int(string) #raise a error if the string is invalid, but if the variable string is not a string, it may have other way to convert to an `int`
Run Code Online (Sandbox Code Playgroud)

但这不是一种非常pythonic的方式,有更好的方法吗?

python floating-point int scientific-notation

5
推荐指数
1
解决办法
702
查看次数