# Numeric Value

## 🔢 NumericValue struct

The `NumericValue` struct is used by the [scaling-value](https://stylishesper.gitbook.io/inventool/scripting/api/stats/scaling-value "mention") class to support multiple numeric types.

> **Namespace:** `Esper.Inventool.Stats`\
> **Access:** `public`\
> **Type:** `struct`\
> **Attributes:** `[Serializable]`

***

### 📦 Fields

| Access   | Field         | Type          | Description          |
| -------- | ------------- | ------------- | -------------------- |
| `public` | `numericType` | `NumericType` | The numeric type.    |
| `public` | `value`       | `Value`       | The value container. |

***

### 🔧 Constructors

| Access   | Constructor                                          | Description                       |
| -------- | ---------------------------------------------------- | --------------------------------- |
| `public` | `NumericValue(NumericType numericType, Value value)` | Sets type and value container.    |
| `public` | `NumericValue(int value)`                            | Creates an integer numeric value. |
| `public` | `NumericValue(float value)`                          | Creates a float numeric value.    |

***

### 🧰 Methods

| Access   | Method                                   | Returns     | Description                                                           |
| -------- | ---------------------------------------- | ----------- | --------------------------------------------------------------------- |
| `public` | `SetValue(int value)`                    | `void`      | Sets value with type conversion.                                      |
| `public` | `SetValue(float value)`                  | `void`      | Sets value with type conversion.                                      |
| `public` | `SetValueWithConversion(int value)`      | `void`      | Writes to `integerValue` or converts to float based on `numericType`. |
| `public` | `SetValueWithConversion(float value)`    | `void`      | Writes to `floatValue` or truncates to int based on `numericType`.    |
| `public` | `ToString()`                             | `string`    | Returns formatted string (`0.##` for float).                          |
| `public` | `ToStatValue(StatIdentity statIdentity)` | `StatValue` | Converts to `StatValue`.                                              |
| `public` | `ToFloat()`                              | `float`     | Converts to `float` based on type.                                    |
| `public` | `ToInt()`                                | `int`       | Converts to `int` based on type.                                      |
| `public` | `Equals(object obj)`                     | `bool`      | Equality using overloaded `==`.                                       |
| `public` | `GetHashCode()`                          | `int`       | Hash based on `value`.                                                |

***

## ➗ Operator Overloads

| Operator   | Signature                        | Returns        | Description                           |
| ---------- | -------------------------------- | -------------- | ------------------------------------- |
| `/`        | `NumericValue / float`           | `NumericValue` | Divides by a float.                   |
| `/`        | `NumericValue / int`             | `NumericValue` | Divides by an int.                    |
| `/`        | `NumericValue / NumericValue`    | `NumericValue` | Divides by another `NumericValue`.    |
| `*`        | `NumericValue * float`           | `NumericValue` | Multiplies by a float.                |
| `*`        | `NumericValue * int`             | `NumericValue` | Multiplies by an int.                 |
| `*`        | `NumericValue * NumericValue`    | `NumericValue` | Multiplies by another `NumericValue`. |
| `+`        | `NumericValue + float`           | `NumericValue` | Adds a float.                         |
| `+`        | `NumericValue + int`             | `NumericValue` | Adds an int.                          |
| `+`        | `NumericValue + NumericValue`    | `NumericValue` | Adds another `NumericValue`.          |
| `-`        | `NumericValue - float`           | `NumericValue` | Subtracts a float.                    |
| `-`        | `NumericValue - int`             | `NumericValue` | Subtracts an int.                     |
| `-`        | `NumericValue - NumericValue`    | `NumericValue` | Subtracts another `NumericValue`.     |
| `==`       | `NumericValue == NumericValue`   | `bool`         | Equality check.                       |
| `!=`       | `NumericValue != NumericValue`   | `bool`         | Inequality check.                     |
| `>`        | `NumericValue > NumericValue`    | `bool`         | Greater‑than comparison.              |
| `<`        | `NumericValue < NumericValue`    | `bool`         | Less‑than comparison.                 |
| `>=`       | `NumericValue >= NumericValue`   | `bool`         | Greater‑than‑or‑equal comparison.     |
| `<=`       | `NumericValue <= NumericValue`   | `bool`         | Less‑than‑or‑equal comparison.        |
| `==`       | `NumericValue == float / int`    | `bool`         | Equality against primitive.           |
| `!=`       | `NumericValue != float / int`    | `bool`         | Inequality against primitive.         |
| `>`/`<`    | `NumericValue >/< float / int`   | `bool`         | Comparison against primitive.         |
| `>=`/`<=`  | `NumericValue >=/<= float / int` | `bool`         | Comparison against primitive.         |
| `implicit` | `int -> NumericValue`            | `NumericValue` | Implicit conversion from int.         |
| `implicit` | `float -> NumericValue`          | `NumericValue` | Implicit conversion from float.       |
| `implicit` | `NumericValue -> float`          | `float`        | Implicit conversion to float.         |
| `implicit` | `NumericValue -> int`            | `int`          | Implicit conversion to int.           |

***

## 🧩 Nested Types

#### `public enum NumericType`

| Name      | Description                  |
| --------- | ---------------------------- |
| `Float`   | Represents a float value.    |
| `Integer` | Represents an integer value. |

***

#### `public struct Value`

| Field          | Type    | Description            |
| -------------- | ------- | ---------------------- |
| `integerValue` | `int`   | Backing integer value. |
| `floatValue`   | `float` | Backing float value.   |

***

## Creating a Numeric Value

```csharp
// A numeric value with the value of 10 (use 10f if the numeric type should be Float)
NumericValue myNumericValue = 10;
```

## Operators

You can use arithmetic and comparison operators for mathematical and comparison purposes.

#### Arithmetic Example

You can use arithmetic operators for a `NumericValue` for mathematical purposes with another `NumericValue`, `int`, or `float` value.

```csharp
NumericValue valueC = valueA + valueB;
```

#### Comparison Example

You can use comparison operators for to compare a `NumericValue` with another `NumericValue`, `int`, or `float` value.

```csharp
if (numericValueA >= numericValueB)
{
    // Do something...
}
```
