我有一个双号223.45654543434,我需要表现出来0.223x10e+2.
我怎么能用Java做到这一点?
我想创建一个输入值并将其转换为科学记数法的函数(N x 10 ^ a)
我尝试了很多不同的东西,但我似乎无法做到.
例:
我输入200.转换器将其转换为2 x 10 ^ 2
我正在尝试编写一个代码来确定自1970年初以来的毫秒数何时将超过long的容量.以下代码似乎可以完成这项工作:
public class Y2K {
public static void main(String[] args) {
int year = 1970;
long cumSeconds = 0;
while (cumSeconds < Long.MAX_VALUE) {
// 31557600000 is the number of milliseconds in a year
cumSeconds += 3.15576E+10;
year++;
}
System.out.println(year);
}
}
Run Code Online (Sandbox Code Playgroud)
此代码在几秒钟内执行并打印292272992.如果不是使用科学记数法,我将cumSeconds写为31558000000L,程序似乎"永远"运行(我只是在10分钟左右后暂停).另请注意,以科学计数形式写入cumSeconds不需要指定数字最后为longL或l.
我正在编写一个处理行星质量和直径的程序; 这些数量用科学记数法表示.我的问题不是,请注意,不是如何以正确的方式打印大数字(那是使用printf(),duh),我会怎样......"输入"这些数字,我想你可以说.例如,表示汞的质量:
3.30 x 10ˆ23
Run Code Online (Sandbox Code Playgroud)
在我的行星质量阵列中,一个元素看起来像:
33.0 * Math.pow(10, 23)
Run Code Online (Sandbox Code Playgroud)
但是,我不认为这是正确的方法 - 它看起来会引发异常...那么我怎么能从程序员的角度表达这样的大数字呢?谢谢!
我需要帮助将包含科学记数的数字的字符串转换为double.
示例字符串:"1.8281e-009""2.3562e-007""0.911348"
我正在考虑将数字分成左边的数字和指数而不只是做数学来生成数字; 但有没有更好/标准的方法来做到这一点?
我有一些项目要分区为多个桶,这样每个桶比最后一个桶大一些.
items = 500
chunks = 5
increment = 0.20
{- find the proportions -}
sizes = take chunks (iterate (+increment) 1)
base = sum sizes / items
buckets = map (base *) sizes
main = print buckets
Run Code Online (Sandbox Code Playgroud)
我确信有一种数学上更优雅的方式来做到这一点,但这不是我的问题.最后一步始终以科学记数法打印出来.
如何获得纯十进制输出?我看过Numeric包,但是我的速度很快.
我2e15一眼就可以轻易地读作"两千万亿",但是因为2000000000000000我必须计算零,这需要更长的时间并且可能导致错误.
为什么我不能声明int或long使用诸如2e9或之类的文字1.3e6?我理解10的负幂,例如10 2e-3或10的幂小于小数位数,例如1.0003e3,会产生一个浮点数,但为什么Java不允许这样的声明,只是截断浮点部分,并在结果值为非整数的情况下发出温和警告?
是否存在技术上的原因,这是一个坏主意,还是所有关于类型安全的?编译器简单地解析像这样的语句不是微不足道的
long x = 2e12 如 long x = 2000000000000 //OK for long
而int y = 2.1234e3作为int y = 2123.4 //warning: loss of precision
当执行以下代码时:
DecimalFormat eNotation1 = new DecimalFormat("#0.###E0");
System.out.println(eNotation1.format(123.456789));
Run Code Online (Sandbox Code Playgroud)
我的预期输出是;
1.235E2
代替,
1.2346E2
被印刷了。
为什么输出1.2346E2?
我知道我可以使用一种方法,例如setMaximumFractionDigits()是否只想设置小数点后的最大位数,但是我只是想了解为什么输出是1.2346E2
我有一个数据库填充了以下双打:
1.60000000000000000000000000000000000e+01
Run Code Online (Sandbox Code Playgroud)
有人知道如何在C++中将这样的数字转换为double吗?
是否有"标准"方式来做这类事情?或者我必须自己动手?
现在我正在做这样的事情:
#include <string>
#include <sstream>
int main() {
std::string s("1.60000000000000000000000000000000000e+01");
std::istringstream iss(s);
double d;
iss >> d;
d += 10.303030;
std::cout << d << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
谢谢!
请考虑以下Python代码段:
for ix in [0.02, 0.2, 2, 20, 200, 2000]:
iss=str(ix) + "e9"
isf=float(iss)
print(iss + "\t=> " + ("%04.03e" % isf ) + " (" + str(isf) + ")")
Run Code Online (Sandbox Code Playgroud)
它生成以下输出:
0.02e9 => 2.000e+07 (20000000.0)
0.2e9 => 2.000e+08 (200000000.0)
2e9 => 2.000e+09 (2000000000.0)
20e9 => 2.000e+10 (20000000000.0)
200e9 => 2.000e+11 (2e+11)
2000e9 => 2.000e+12 (2e+12)
Run Code Online (Sandbox Code Playgroud)
我的问题是 - 是否有可能以某种方式"回去"?那是:
2.000e+07 => 0.02e9
2.000e+08 => 0.2e9
2.000e+09 => 2e9
2.000e+10 => 20e9
2.000e+11 => 200e9
2.000e+12 => 2000e9
Run Code Online (Sandbox Code Playgroud)
......我指定我希望指数为" e+09"; …