toNumber | MuleSoft Documentation
# toNumber
## toNumber(str: String, formatters: Array<Formatter>): Number
Transforms a `String` value into a `Number` value using the first `Formatter` that matches with the given value to transform.
_Introduced in DataWeave version 2.5.0._
### Parameters
Name | Type | Description  
---|---|---  
The `String` value to transform into a `Number` value.  
`formatters` | Array<DatesFormatter> | The `array` of formatting to use on the `Number` value.  
### Example
This example shows how `toNumber` behaves with different inputs. It produces output in the `application/dw` format.
#### Source
```
%dw 2.0
import * from dw::util::Coercions
import * from dw::Runtime
output application/dw
---
{
 a: toNumber("0.005", [{format: "seconds"}, {format: ".00"}]),
 b: try(() -> toNumber("0.005", [{format: "seconds"}])).error.message
}
```

#### Output
```
{
 a: 0.005 as Number {format: ".00"},
 b: "Could not find a valid formatter for '0.005'"
}
```

## toNumber(dateTime: DateTime, unit: MillisOrSecs | Null = null): Number
A variant of `toNumber` that transforms a `DateTime` value into a number of seconds or milliseconds, depending on the selected unit.
_Introduced in DataWeave version 2.4.0._
### Parameters
Name | Description  
---|---  
The `DateTime` value to transform into a `Number` value.  
The unit of time (`"milliseconds"` or `"seconds"`) to use Given a `null` value, the function uses `"seconds"`.  
### Example
This example shows how `toNumber` behaves with different inputs.
#### Source
```
%dw 2.0
import * from dw::util::Coercions
output application/json
---
{
  epoch: toNumber(|2015-10-01T23:57:59Z|),
  millis: toNumber(|2015-10-01T23:57:59Z|, "milliseconds")
}
```

#### Output
```
{
 "epoch": 1443743879,
 "millis": 1443743879000
}
```

## toNumber(period: Period, unit: PeriodUnits | Null = null): Number
A variant of `toNumber` that transforms a `Period` value into a number of hours, minutes, seconds, milliseconds or nanoseconds (`nanos`).
_Introduced in DataWeave version 2.4.0._
### Parameters
Name | Description  
---|---  
The `Period` value to transform into a `Number` value.  
The unit to apply to the specified `period`: `hours`, `minutes`, `seconds`, `milliseconds`, or `nanos`.  
### Example
This example shows how `toNumber` behaves with different inputs.
#### Source
```
%dw 2.0
import * from dw::util::Coercions
output application/json
---
{
  toSecondsEx1: toNumber(|PT1H10M|, "seconds"),
  toSecondsEx2: toNumber(|PT1M7S|, "milliseconds")
}
```

#### Output
```
{
 "toSecondsEx1": 4200,
 "toSecondsEx2": 67000
}
```

## toNumber(value: String | Key, format: String | Null = null, locale: String | Null = null): Number
A variant of `toNumber` that transforms a `String` or `Key` value into a `Number` value and that accepts a format and locale.
_Introduced in DataWeave version 2.4.0._
### Parameters
Name | Description  
---|---  
The `String` or `Key` value to transform into a `Number` value.  
Optional formatting to apply to the `value`. A `format` accepts `#` or `0` (but not both) as placeholders for _decimal_ values and a single whole number that is less than `10`. Only one decimal point is permitted. A `null` or empty `String` value has no effect on the `Number` value. Other characters produce an error.  
Optional ISO 3166 country code to use, such as `US`, `AR`, or `ES`. A `null` or absent value uses your JVM default.  
### Example
This example shows how `toNumber` behaves with different inputs.
#### Source
```
%dw 2.0
import * from dw::util::Coercions
var myKey = keysOf({"123" : "myValue"})
output application/json
---
 {
   "default": toNumber("1.0"),
   "withFormat": toNumber("0.005",".00"),
   "withLocal": toNumber("1,25","#.##","ES"),
   "withExtraPlaceholders": toNumber("5.55","####.####"),
   "keyToNumber": toNumber(myKey[0])
 }
```

#### Output
```
{
 "default": 1.0,
 "withFormat": 0.005,
 "withLocal": 1.25,
 "withExtraPlaceholders": 5.55,
 "keyToNumber": 123
}
```