# Calculate share of Nats

**URL:** <https://forum.dfinity.org/t/calculate-share-of-nats/4343>\
**Category:** Developers\
**Created:** [May 25, 2021, 7:29pm UTC](https://forum.dfinity.org/t/calculate-share-of-nats/4343 "2021-05-25T19:29:38Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![senior.joinu](https://sea1.discourse-cdn.com/flex023/user_avatar/forum.dfinity.org/senior.joinu/32/9240_2.png) [@senior.joinu](https://forum.dfinity.org/u/senior.joinu)\
**Post date:** [May 25, 2021, 7:29pm UTC](https://forum.dfinity.org/t/calculate-share-of-nats/4343/1 "2021-05-25T19:29:39Z")

</div>

Let’s say I have two `Nat`s: `A` and `B`  
By definition `A` is always bigger than `B`

How can I calculate `X: float32` which is `B / A`?

---

<div class="post-metadata">

**Author:** ![chenyan](https://avatars.discourse-cdn.com/v4/letter/c/35a633/32.png) [@chenyan](https://forum.dfinity.org/u/chenyan)\
**Post date:** [May 25, 2021, 7:35pm UTC](https://forum.dfinity.org/t/calculate-share-of-nats/4343/2 "2021-05-25T19:35:00Z")

</div>

Motoko doesn’t have `float32`, only `Float`, which is 64-bit.

```auto
import Float "mo:base/Float";
Float.fromInt(B) / Float.fromInt(A)

```

`fromInt` works for `Nat`, because `Nat` is a subtype of `Int`.

---

<div class="post-metadata">

**Author:** ![senior.joinu](https://sea1.discourse-cdn.com/flex023/user_avatar/forum.dfinity.org/senior.joinu/32/9240_2.png) [@senior.joinu](https://forum.dfinity.org/u/senior.joinu)\
**Post date:** [May 25, 2021, 7:36pm UTC](https://forum.dfinity.org/t/calculate-share-of-nats/4343/3 "2021-05-25T19:36:35Z")

</div>

Yea… sorry for misleading. I’m looking for a rust solution.

Thanks for your answer!

---

<div class="post-metadata">

**Author:** ![senior.joinu](https://sea1.discourse-cdn.com/flex023/user_avatar/forum.dfinity.org/senior.joinu/32/9240_2.png) [@senior.joinu](https://forum.dfinity.org/u/senior.joinu)\
**Post date:** [May 25, 2021, 7:43pm UTC](https://forum.dfinity.org/t/calculate-share-of-nats/4343/4 "2021-05-25T19:43:49Z")

</div>

Will something like this work?

```auto
use num_traits::ToPrimitive;
...
result.0.to_f32();

```

UPD: no it won’t ☹

---

<div class="post-metadata">

**Author:** ![senior.joinu](https://sea1.discourse-cdn.com/flex023/user_avatar/forum.dfinity.org/senior.joinu/32/9240_2.png) [@senior.joinu](https://forum.dfinity.org/u/senior.joinu)\
**Post date:** [May 25, 2021, 7:47pm UTC](https://forum.dfinity.org/t/calculate-share-of-nats/4343/5 "2021-05-25T19:47:50Z")

</div>

I’ve figured out your example won’t work also if `A` and `B` are both bigger than 64 bits.

---

<div class="post-metadata">

**Author:** ![chenyan](https://avatars.discourse-cdn.com/v4/letter/c/35a633/32.png) [@chenyan](https://forum.dfinity.org/u/chenyan)\
**Post date:** [May 25, 2021, 8:24pm UTC](https://forum.dfinity.org/t/calculate-share-of-nats/4343/6 "2021-05-25T20:24:29Z")

</div>

Yes, but since you are losing precision anyway, you can truncate `Nat` to 64 bits before converting to `Float`.

For Rust, you may need infinite precision fraction as well, for example [fraction - Rust](https://docs.rs/fraction/0.8.0/fraction/)

You can also decode a Candid `Nat` to `u128` in Rust (decoding will fail if the value is more than 128bit). Might be easier to convert u128 to f32.
