【问题标题】:How can I convert a char to a double from 0-1?如何将 char 从 0-1 转换为 double?
【发布时间】:2019-11-22 15:48:40
【问题描述】:

我正在尝试将一个字符数组转换为一个双精度数组,每个字符都在 0-1 之间,因此 a 将是 0z 将是 1。目前,我已经想到了这个方法,

public static double[] charToDouble(char[] chars){
  double[] doubles=new double[chars.length];
  double one=1;
  double twentySix=26;
  double eachChar=one/twentySix;
  for(int i=0; i<chars.length; i++){
    int charNum=((int)input)-96;
    doubles[i]=eachChar*charNum;
  }
  return doubles;
}

a 将被转换为1/26 而不是0

【问题讨论】:

  • 1/26 是整数除法
  • gblodgett 谢谢,我会编辑问题

标签: java char type-conversion double


【解决方案1】:

你需要除以25,而不是26,因为26个字母之间有25个间隔

您在考虑自己的方法;在一个简单的循环中只需要一行代码:只需从每个字母的char 中减去a,然后将结果除以25

for(int i = 0; i < chars.length; i++) {
    doubles[i] = (chars[i] - 'a') / 25d;
}

注意 25 之后的小“d” - 这使得 25 成为 double,这使得结果成为 double。如果你不这样做,你会得到整数运算,这将使除z 之外的每个字母产生0

【讨论】:

  • 25 == 'z' - 'a'(但不是双倍)-(顺便说一句反引号是错误的)
  • @CarlosHeuberger 反引号来自 iPhone 键盘(现已修复),但感谢您指出。但是算术是正确的:只要至少有一个操作数是double,计算和结果也是double
  • 我的意思是我们可以(应该?)使用'z'-'a'而不是25(比如使用'a'而不是96)
猜你喜欢
  • 1970-01-01
  • 2013-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-05
  • 1970-01-01
相关资源
最近更新 更多