Calendar中的Calendar的add方法将整数作为输入
int secs = 3; cal.add(Calendar.SECOND, secs);
但是如果秒是Long类型怎么办呢.
long secs = 3
有很多可能性,例如添加秒迭代,但其他选项有哪些?
我有以下问题,所以我试图将一个double转换为它的二进制表示,但使用这个Long.toBinaryString(Double.doubleToRawLongBits(d))
没有帮助,因为我有大数字,Long不能存储它们,即2^900
.
感谢任何帮助:).
我的项目中有以下抽象通用数据持有者(简化):
public abstract static class Value<E> {
E value;
public void setValue(E value) {
this.value = value;
}
public E getValue() {
return this.value;
}
public String toString() {
return "[" + value + "]";
}
}
Run Code Online (Sandbox Code Playgroud)
随着一个InputCollection
包含列表Objects
:
public static class InputCollection {
private ArrayList<Object> values;
public InputCollection() {
this.values = new ArrayList<>();
}
public void addValue(Value<?> value) {
System.out.println("addding " + value + " to collection");
this.values.add(value);
}
public <D> D getValue(Value<D> value, D defaultValue) …
Run Code Online (Sandbox Code Playgroud) 我从一个包含非常大数字的文本文件加载行.String有toInt方法,但是如何将字符串转换为能够处理大数字的Int64呢?
我没有看到toInt64方法或toLong等.必须有办法,但我还没有通过搜索找到任何东西.
或者我想我可以用数字(或数字组)读取字符串中的数字,然后将它们与适当的因子10一起添加,但这看起来有点过分.或者正确的方法是以二进制形式读取数据并以这种方式转换它?
谢谢
目前,我使用的是有符号值,-2 ^ 63到2 ^ 63-1.现在我需要相同的范围(2*2 ^ 64),但只有正值.我发现java文档提到unsigned long,它适合这种用法.
我试图将2 ^ 64声明为一个Long包装器对象,但它仍然丢失了数据,换句话说,它只捕获到了Long.MAX_VALUE
,所以我显然遗漏了一些东西.是BigInteger
的签署久,Java支持?
是否有关于如何声明和使用它的定义或指针?
我试图来回编码一个简单的字符串"测试".
public static String encode(Key publicKey, String data) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException {
byte[] byteData = data.getBytes(); // convert string to byte array
Cipher cipher = Cipher.getInstance(ALGORITHM); // create conversion processing object
cipher.init(Cipher.ENCRYPT_MODE, publicKey); // initialize object's mode and key
byte[] encryptedByteData = cipher.doFinal(byteData); // use object for encryption
return new String(encryptedByteData); // convert encrypted byte array to string and return it
}
public static String decode(Key privateKey, String data) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException {
byte[] …
Run Code Online (Sandbox Code Playgroud) 在128位数字变为现实之前,长64位并保留很长时间是不是更有意义?
我Object obj
知道其实是一个long
.在某些数学代码中我需要它double
.
直接将其加倍可以安全吗?
double x = (double)obj;
Run Code Online (Sandbox Code Playgroud)
或者我应该先把它转换成长,然后再加倍.
double x = (double)(long)obj;
Run Code Online (Sandbox Code Playgroud)
我还发现了另一个(不太可读)替代方案:
double x = new Long((long)obj).doubleValue();
Run Code Online (Sandbox Code Playgroud)
这样做有什么危险/含义?
解决方案摘要:
obj
是一个Number
而不是一个long
.double x = ((Number)obj).doubleValue()
double x = (long)obj
有关Java6/7问题的更多详细信息,请阅读有关TJ答案的讨论.
编辑:我做了一些快速测试.两种投射方式(显式/魔术)具有相同的性能.
为什么这段代码会抛出NumberFormatException
:
String binStr = "1000000000000000000000000000000000000000000000000000000000000000";
System.out.println(binStr.length());// = 64
System.out.println(Long.parseLong(binStr, 2));
Run Code Online (Sandbox Code Playgroud) 我试图从一个长变量中获取第二个数字.
long mi = 110000000;
int firstDigit = 0;
String numStr = Long.toString(mi);
for (int i = 0; i < numStr.length(); i++) {
System.out.println("" + i + " " + numStr.charAt(i));
firstDigit = numStr.charAt(1);
}
Run Code Online (Sandbox Code Playgroud)
当我firstDigit = numStr.charAt(1)
在控制台上打印时.我得到1
预计但当循环结束firstDigit
了49
.有点困惑为什么.