【发布时间】:2014-02-18 16:29:09
【问题描述】:
您好,我有以下以 10 为底的浮点值:0.625。我需要将这个以 10 为底的值转换为二进制格式,即:0.101。 我发现的算法如下。它有效,但我不明白为什么会这样。有人可以解释一下为什么下面的代码有效吗?我知道小数点后的数字是以 1/2^n 的方式计算的,其中 n 从小数点开始计算。谢谢。
为了澄清,我需要知道数学公式背后的推理。不单步执行代码。
private static String floatToBinaryString( double n ) {
String val = "0.";
while ( n > 0 ) {
double r = n * 2;
if( r >= 1 ) {
val += "1";
n = r - 1;
}else{
val += "0";
n = r;
}
}
return val;
}
【问题讨论】:
-
看起来不像你在base 10中拥有它
-
我建议你在调试器中单步调试代码,看看每一行代码的作用。
-
我知道每一行代码的作用,我已经说过它有效。我想知道它为什么有效。数学公式背后的原因是什么。
-
您可能已经将所有代码都排除在外,并用类似这样的措辞...“将基数 10 分数转换为基数 2 的数学公式背后的原因是什么?”。跨度>
标签: java algorithm binary numbers binaryformatter