java - 我正在尝试将二进制数转换为十进制数,但我的输出始终为 0
问题描述
这是我的代码。我尝试将二进制转换为 Char 数组,然后将数组中的每个 char 乘以 2 到数组中其对应数字的幂,然后将 char 数组的所有值相加成双精度数。编程新手,所以有点困惑。我的输入二进制是 txfBinaryInput,我的输出标签是 lblDisplay。
private void btnProcessActionPerformed(java.awt.event.ActionEvent evt)
{
if (txfBinaryInput.getText().equals(""))
{
lblDisplay.setText("ERROR: NO INPUT");
} else
{
int n = 0;
int[] binaryValueStorage = new int[100];
double[] decimalValueStorage = new double[100];
String binaryInput = txfBinaryInput.getText();
int binaryNumber = binaryInput.length();
char[] binaryDigits = binaryInput.toCharArray();
for (int i = 0; i >= binaryNumber; i++)
{
binaryValueStorage[n] = binaryDigits[n];
decimalValueStorage[n] = binaryValueStorage[n] * (Math.pow(2, n));
n++;
}
double sum = 0;
for (double a : decimalValueStorage)
{
sum += a;
}
lblDisplay.setText("The Deciaml Value Is " + sum);
}
}
解决方案
当心:在你的 for 循环条件中,你有i >= binaryNumber
而不是i < binaryNumber
,因此你的程序永远不会进入循环!
顺便说一句,为什么要使用两个变量i
和n
,用于相同的目的(递增和访问数组)?
编辑:另一个问题:
在二进制数中,低位在右边,但在数组中,索引从左到右!
因此,您希望最右边的数字乘以 2^0,右边的下一个数字乘以 2^1,依此类推。
但在您的代码中,发生的情况恰恰相反:它是最左边的数字(索引 0 处的数字)乘以 2^0!
要修复,您可以:
1)在开始转换之前反转您的数组,并保持其余代码不变binaryDigits
2)替换decimalValueStorage[n] = binaryValueStorage[n] * (Math.pow(2, n));
为decimalValueStorage[n] = binaryValueStorage[n] * (Math.pow(2, binaryNumber - n));
希望这可以帮助!
推荐阅读
- php - 转换多用户登录
- tableau-api - 如何仅使用每个类别的特定行数进行计算?
- scala - 带有参数的方法的 Scala 类型类
- reactjs - ReactJS - 应该如何分离组件的功能以保持“关注点分离”?
- sql-server - 自动将 SSIS 包从 SQL Server 2012 升级到更高版本
- r - 如何在 R 中使用这种嵌套的 JSON 格式?
- c# - 读取文本文件并从中创建多维数组
- c - 如何在下面的代码中处理 \n(换行符)
- r - str_replace_all 基于使用 r 的数据框的句子
- kotlin - 是否可以在每个月的第一天使用 scheduleAtFixedRate 触发一个函数?