> For the complete documentation index, see [llms.txt](https://docs.electricbolt.co.nz/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.electricbolt.co.nz/configuration-subclasses/supported-property-types/float.md).

# Float

{% tabs %}
{% tab title="Swift" %}
`Float` is a single-precision 4 byte floating-point type with an approximate range of 1.2E-38 to 3.4E+38.

The default value of a `Float` is 0.0. You can change the default value of the property by assigning a new value in an overridden [<mark style="color:blue;">`reset`</mark>](https://www.electricbolt.co.nz/api/Classes/APLConfiguration.html#/c:objc\(cs\)APLConfiguration\(im\)reset) method.
{% endtab %}

{% tab title="Objective-C" %}
`float` is a single-precision 4 byte floating-point type with an approximate range of 1.2E-38 to 3.4E+38.

The default value of a `float` is 0.0. You can change the default value of the property by assigning a new value in an overridden [<mark style="color:blue;">`reset`</mark>](https://www.electricbolt.co.nz/api/Classes/APLConfiguration.html#/c:objc\(cs\)APLConfiguration\(im\)reset) method.

`float` properties should be declared in your [<mark style="color:blue;">`APLConfiguration`</mark>](https://www.electricbolt.co.nz/api/Classes/APLConfiguration.html) subclass header file as follows:

```objectivec
@import AppfigurateLibrary;

@interface Configuration : APLConfiguration

@property(nonatomic, assign) float propertyName;
...
```

{% endtab %}

{% tab title="Dart" %}
The flutter [<mark style="color:blue;">`APLNativeConfiguration`</mark>](https://pub.dev/documentation/appfigurateflutter/latest/appfigurateflutter/APLNativeConfiguration-class.html) class defers to the underlying platform [<mark style="color:blue;">`APLConfiguration`</mark>](https://www.electricbolt.co.nz/api/Classes/APLConfiguration.html) (iOS) or [<mark style="color:blue;">`nz.co.electricbolt.appfiguratelibrary.Configuration`</mark>](https://www.electricbolt.co.nz/api/android/nz/co/electricbolt/appfiguratelibrary/Configuration.html) (Android) subclass to read property values.

As Dart doesn't have a single-precision `float` data type, you should map to a double-precision `double` data type instead:

| Dart property type | Swift property type | Objective-C property type | Kotlin property type | Java property type |
| ------------------ | ------------------- | ------------------------- | -------------------- | ------------------ |
| **double**         | Float               | float                     | Float                | float              |
| {% endtab %}       |                     |                           |                      |                    |

{% tab title="JavaScript" %}
The React Native module `AppfigurateModule` class defers to the underlying platform [<mark style="color:blue;">`APLConfiguration`</mark>](https://www.electricbolt.co.nz/api/Classes/APLConfiguration.html) (iOS) or [<mark style="color:blue;">`nz.co.electricbolt.appfiguratelibrary.Configuration`</mark>](https://www.electricbolt.co.nz/api/android/nz/co/electricbolt/appfiguratelibrary/Configuration.html) (Android) subclass to read property values.

React Native always converts the underlying Float to a JavaScript Number - you should be aware of [JavaScript's 53 bit limitation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MAX_SAFE_INTEGER).
{% endtab %}
{% endtabs %}

## **Local properties**

### **Slider UI**

Allows a float property to be changed in Appfigurate using a slider between minimum and maximum values.&#x20;

![](/files/ww0B3ztrp4xfzgJ8bo82)

{% tabs %}
{% tab title="Swift" %}

> Swift prototype

```swift
@FloatPropertySlider(min, max, icon, description, restart)
var propertyName: Float
```

You can customize the minimum and maximum images using the [<mark style="color:blue;">`icon`</mark>](https://www.electricbolt.co.nz/api/Enums/APLIconSlider.html) parameter. If `restart` is `true`, then the app will be restarted if the property value changes.

> Swift example

```swift
import AppfigurateLibrary

@objcMembers class Configuration: APLConfiguration {

    @FloatPropertySlider(min: 60.5, max: 120.41, icon: .volume, description: "Clipping - decibels", restart: false)
    var maxDecibel: Float
    
    override func reset() {
        maxDecibel = 100.0
    }
    ...
```

{% endtab %}

{% tab title="Objective-C" %}

> Objective-C Prototype

<pre class="language-objectivec"><code class="lang-objectivec"><strong>FLOAT_PROPERTY_SLIDER(propertyName, minValue, maxValue, icon, description, restart)
</strong></code></pre>

You can customize the minimum and maximum images using the [<mark style="color:blue;">`icon`</mark>](/configuration-subclasses/slider-icon-types.md) parameter. If `restart` is `YES`, then the app will be restarted if the property value changes.

> Objective-C example

```objectivec
@import AppfigurateLibrary;

@interface Configuration : APLConfiguration

@property(nonatomic, assign) float maxDecibel;

@end

@implementation Configuration

FLOAT_PROPERTY_SLIDER(maxDecibel, 60.5, 120.41, APLIconSliderVolume, @"Clipping - decibels", NO);

- (void) reset {
    self.maxDecibel = 100.0;
}
...
```

{% endtab %}

{% tab title="Dart" %}

> Dart prototype

```dart
double get propertyName => nativeDouble('propertyName');
```

> Dart example

```dart
import 'package:appfigurateflutter/appfigurateflutter.dart';

public class Configuration extends APLNativeConfiguration {

    double get maxDecibel => nativeDouble('maxDecibel');
    ...
```

{% endtab %}

{% tab title="JavaScript" %}

> JavaScript example

```javascript
import {
  NativeModules,
} from 'react-native';

const {Appfigurate} = NativeModules;

...

let maxDecibel = await Appfigurate.nativeValue("maxDecibel"); // Number
```

{% endtab %}
{% endtabs %}

### **Editable UI**

Allows a float property to be changed in Appfigurate using a text field between minimum and maximum values, and an optional regular expression validating input.

![](/files/X0VBu8lpOYXJVay5myUr)

{% tabs %}
{% tab title="Swift" %}

> Swift prototype

```swift
@FloatPropertyEdit(min, max, regex, description, restart)
var propertyName: Float
```

If `restart` is `true`, then the app will be restarted if the property value changes.

> Swift example

```swift
import AppfigurateLibrary

@objcMembers class Configuration: APLConfiguration {

    @FloatPropertyEdit(min: -2.1, max: 4.1, regex: "", description: "Shot accuracy", restart: false)
    var shotAccuracy: Float
    
    override func reset() {
        shotAccuracy = 3.241
    }
    ...
```

{% endtab %}

{% tab title="Objective-C" %}

> Objective-C prototype

```objectivec
FLOAT_PROPERTY_EDIT(propertyName, minValue, maxValue, regex, description, restart)
```

If `restart` is `YES`, then the app will be restarted if the property value changes.

> Objective-C example

```objectivec
@import AppfigurateLibrary;

@interface Configuration : APLConfiguration

@property(nonatomic, assign) float shotAccuracy;

@end

@implementation Configuration

FLOAT_PROPERTY_EDIT(shotAccuracy, -2.1, 4.1, @"", @"Shot accuracy", NO);

- (void) reset {
    self.shotAccuracy = 3.241;
}
...
```

{% endtab %}

{% tab title="Dart" %}

> Dart prototype

```dart
double get propertyName => nativeDouble('propertyName');
```

> Dart example

```dart
import 'package:appfigurateflutter/appfigurateflutter.dart';

public class Configuration extends APLNativeConfiguration {

    double get shotAccuracy => nativeDouble('shotAccuracy');
    ...
```

{% endtab %}

{% tab title="JavaScript" %}

> JavaScript example

```javascript
import {
  NativeModules,
} from 'react-native';

const {Appfigurate} = NativeModules;

...

let shotAccuracy = await Appfigurate.nativeValue("shotAccuracy"); // Number
```

{% endtab %}
{% endtabs %}

### **List UI**

Allows a float property to be changed in Appfigurate by allowing the user to select from a predefined list of valid choices.&#x20;

![](/files/hpnFYq3Tpvnz9KLb7czM)

{% tabs %}
{% tab title="Swift" %}

> Swift prototype

```swift
@FloatPropertyList(description, restart, values)
var propertyName: Float
```

If `restart` is `true`, then the app will be restarted if the property value changes.

> Swift example

```swift
import AppfigurateLibrary

@objcMembers class Configuration: APLConfiguration {

    @FloatPropertyList(description: "Quality rating", restart: true, values: ["Low": 10.0, "Average": 50.0, "Excellent": 95.0])
    var rating: Float
    
    override func reset() {
        rating = 10.0
    }
    ...
```

{% endtab %}

{% tab title="Objective-C" %}

> Objective-C prototype

```objectivec
FLOAT_PROPERTY_LIST(propertyName, description, restart, ...)
```

If `restart` is `YES`, then the app will be restarted if the property value changes.

> Objective-C example

```objectivec
@import AppfigurateLibrary;

@interface Configuration : APLConfiguration

@property(nonatomic, assign) float rating;

@end

@implementation Configuration

FLOAT_PROPERTY_LIST(rating, @"Quality rating", NO, @{@"Low": @10.0, @"Average": @50.0, @"Excellent": @95.0});

- (void) reset {
    self.rating = 10.0;
}
...
```

{% endtab %}

{% tab title="Dart" %}

> Dart prototype

```dart
double get propertyName => nativeDouble('propertyName');
```

> Dart example

```dart
import 'package:appfigurateflutter/appfigurateflutter.dart';

public class Configuration extends APLNativeConfiguration {

    double get rating => nativeDouble('rating');
    ...
```

{% endtab %}

{% tab title="JavaScript" %}

> JavaScript example

```javascript
import {
  NativeModules,
} from 'react-native';

const {Appfigurate} = NativeModules;

...

let rating = await Appfigurate.nativeValue("rating"); // Number
```

{% endtab %}
{% endtabs %}

### **Editable List UI**

Allows a float property to be changed in Appfigurate by allowing the user to select from a predefined list of valid choices. The user can customize the list adding by additional values using a text field between minimum and maximum values, and an optional regular expression validating input.&#x20;

![](/files/OHK5pQDpAYcYRaDdTKQC)

{% tabs %}
{% tab title="Swift" %}

> Swift prototype

```swift
@FloatPropertyListEdit(min, max, regex, description, restart, values)
var propertyName: Float
```

If `restart` is `true`, then the app will be restarted if the property value changes.

> Swift example

```swift
import AppfigurateLibrary

@objcMembers class Configuration: APLConfiguration {

    @FloatPropertyListEdit(min: 0.0, max: 366.0, regex: #"^(0?[0-9]?[0-9]|[1-2][0-9][0-9]|3[0-5][0-9]|36[0-5])?(?:\.\d+)?$"#, description: "Forward server time (days)", restart: false, values: ["7 days": 7.0, "1 month": 30.0, "1 Year": 365.0])
    var forwardServerTime: Float
    
    override func reset() {
        forwardServerTime = 7.0
    }
    ...
```

{% endtab %}

{% tab title="Objective-C" %}

> Objective-C prototype

```objectivec
FLOAT_PROPERTY_LIST_EDIT(propertyName, minValue, maxValue, regex, description, restart, ...)
```

If `restart` is `YES`, then the app will be restarted if the property value changes.

> Objective-C example

```objectivec
@import AppfigurateLibrary;

@interface Configuration : APLConfiguration

@property(nonatomic, assign) float forwardServerTime;

@end

@implementation Configuration

FLOAT_PROPERTY_LIST_EDIT(forwardServerTime, 0.0, 366.0, @"^(0?[0-9]?[0-9]|[1-2][0-9][0-9]|3[0-5][0-9]|36[0-5])?(?:\\.\\d+)?$", @"Forward server time (days)", NO, @{@"7 days": @7.0, @"1 month": @30.0, @"1 Year": @365.0});

- (void) reset {
    self.forwardServerTime = 7.0;
}
...
```

{% endtab %}

{% tab title="Dart" %}

> Dart prototype

```dart
double get propertyName => nativeDouble('propertyName');
```

> Dart example

```dart
import 'package:appfigurateflutter/appfigurateflutter.dart';

public class Configuration extends APLNativeConfiguration {

    double get forwardServerTime => nativeDouble('forwardServerTime');
    ...
```

{% endtab %}

{% tab title="JavaScript" %}

> JavaScript example

```javascript
import {
  NativeModules,
} from 'react-native';

const {Appfigurate} = NativeModules;

...

let forwardServerTime = await Appfigurate.nativeValue("forwardServerTime"); // Number
```

{% endtab %}
{% endtabs %}
