Better way to combine number with fraction?
4 views (last 30 days)
Show older comments
I have this struct output (from ROS2 message):
MessageType: 'builtin_interfaces/Time'
sec: 1706819594
nanosec: 685974901
I want to combine sec and nanosec in one value like this:
1706819594.685974901
I used the following line of code (and it worked):
zBase.header.stamp.sec+ sprintf(".%d",zBase.header.stamp.nanosec)
Is there a better way ?
0 Comments
Accepted Answer
Stephen23
on 1 Feb 2024
Edited: Stephen23
on 1 Feb 2024
Note that you will need to use SPRINTF (or COMPOSE etc) to get the right output when NANOSEC has fewer than the full nine digits:
s = 1706819594;
ns = 685974901;
sprintf("%d.%09d",s,ns)
ns = 123;
sprintf("%d.%09d",s,ns)
Whereas your format string will given an incorrect output:
s + sprintf(".%d",ns)
If the input number has more than nine digits then the output will be wrong anyway.
5 Comments
Stephen23
on 3 Feb 2024
If the two values are numeric and you want a single numeric output then skip the intermediate text:
format long G
s = 1706819594;
ns = 685974901;
out = s + ns/1e9
As mentioned elsewhere in this thread, converting to numeric will irretrievably lose information.
More Answers (1)
Jon
on 1 Feb 2024
If you want to use it as a numerical value I would do this
val = str2double(zBase.header.stamp.sec) + str2double(zBase.header.stamp.nanosec)/1e9
4 Comments
See Also
Categories
Find more on Publishers and Subscribers in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!