class Percentage {

  public final double value;

  /**
   * Creates a new {@link org.assertj.core.data.Percentage}.
   *
   * @param value the value of the percentage.
   * @return the created {@code Percentage}.
   * @throws NullPointerException if the given value is {@code null}.
   * @throws IllegalArgumentException if the given value is negative.
   */
  public static Percentage withPercentage(double value) {
    checkArgument(value >= 0, "The percentage value <%s> should be greater than or equal to zero", value);
    return new Percentage(value);
  }

  private Percentage(double value) {
    this.value = value;
  }

  @Override
  public boolean equals(Object obj) {<FILL_FUNCTION_BODY>}

  @Override
  public int hashCode() {
    return Double.hashCode(value);
  }

  @Override
  public String toString() {
    return noFractionalPart() ? format("%s%%", (int) value) : format("%s%%", value);
  }

  private boolean noFractionalPart() {
    return (value % 1) == 0;
  }

}

    if (this == obj) return true;
    if (!(obj instanceof Percentage)) return false;
    Percentage other = (Percentage) obj;
    return Double.compare(value, other.value) == 0;
  
<no_super_class>