使用开关盒中的双精度可能会导致精度下降

时间:2014-02-27 22:18:04

标签: java compiler-errors

我正在研究一个电阻器的类,我想给出一个公差数,然后将该公差值的颜色吐出来。我已经使用了与其他int值相同的精确方法,但是这个双重值不起作用,我无法弄清楚原因。任何人都可以帮忙。我已经尝试在所有案例编号的末尾添加'd'以确保它们是双打的,但没有修复它以便这不是问题。

  public static String toleranceColor(double tolerance)
 {
  String band1 = null;
  switch (tolerance)
 {
  case 1: band1 = "BROWN"; break;
  case 2: band1 = "RED"; break;
  case 0.5: band1 = "GREEN"; break;
  case 0.25: band1 = "BLUE"; break;
  case 0.1: band1 = "VIOLET"; break;
  case 0.05: band1 = "GREY"; break;
  case 5: band1 = "GOLD"; break;
  case 10: band1 = "SILVER"; break;
  case 20: band1 = "NONE"; break;
  default: band1 = "INVALID TOLERANCE"; break;
 }
}

3 个答案:

答案 0 :(得分:0)

您的问题是,您正在尝试将double用于switch案例。 switch仅应用于离散值的问题,请考虑使用枚举作为替换值或将值乘以100并将其转换为Integer

答案 1 :(得分:0)

您可以将double数字转换为整数并获得相同的解决方案。您不能将double与开关一起使用。

 public static String toleranceColor(double tolerance)
 {


 String band1 = null;
 switch ((int)(tolerance*100))
 {
  case 100: band1 = "BROWN"; break;
  case 200: band1 = "RED"; break;
  case 50: band1 = "GREEN"; break;
  case 25: band1 = "BLUE"; break;
  case 10: band1 = "VIOLET"; break;
  case 5: band1 = "GREY"; break;
  case 500: band1 = "GOLD"; break;
  case 1000: band1 = "SILVER"; break;
  case 2000: band1 = "NONE"; break;
  default: band1 = "INVALID TOLERANCE"; break;
 }
}

答案 2 :(得分:0)

构建HashMap<Double,String>以存储所有值,并填充它。静态初始化程序将是一个很好的地方,因为你永远不会改变它,你只想做一次。

然后,使用地图的case方法,而不是get语句。