我有这段代码,“text”被强制为示例值
public static String binStringToRealString(String text, int precision) {
String result = "";
long longBits;
Double doubleValue;
text = "0011111111110001100110011001100110011001100110011001100110011010";
longBits = Long.parseLong(text, 2);
Log.d(TAG, "longBits = " + longBits);
// longBits = 4607632778762754458
doubleValue = Double.longBitsToDouble(longBits);
Log.d(TAG, "doubleValue = " + doubleValue);
// doubleValue = 1.1
result = doubleValue.toString();
Log.d(TAG, "result = " + result);
return result;
}
我可以以某种方式得不到舍入的doubleValue吗?
实际值为1.10000000000000008881784197001
喜欢这个转换器 http://www.binaryconvert.com/result_double.html?hexadecimal=3FF199999999999A
我应该怎样做才能停止四舍五入?
答案 0 :(得分:1)
double
不会显示该精确度。您将不得不使用类似BigDecimal
的内容。只需执行(new BigDecimal(doubleValue)).toString()
填充result
即可。但是,您从中获得的String
代表是1.100000000000000088817841970012523233890533447265625
,这是22
个额外数字,而不是您发布的确切值。
编辑:事实上,为MathContext
构造函数使用不同的BigDecimal
类型,我无法获得您发布的确切值(即具有恰好多少位数的值)所以我不确定该值是多少算了。
Your exact value -> 1.10000000000000008881784197001
MathContext.DECIMAL64 -> 1.100000000000000
MathContext.DECIMAL128 -> 1.100000000000000088817841970012523
MathContext.UNLIMITED -> 1.100000000000000088817841970012523233890533447265625