# Limiting width of numeric string

## Recommended Posts

As far as I now there is 2 way to define how to format a numeric into a string using the floating point representation (%f):

- Setting the number of significant digits (%_2f)

- Setting the number of digits or precision (%.2f)

However I often find myself in the need of a way to define the width of the string. For example I always want 3 digits maximum. Using significant digits won't work if the number is 0.0012 since this only has 2 significant digits, so the string will be 0.0012 even though I would like to see 0.00 (so 0 if we hide trailing zeros).

On the other hand, using digits of precision won't work if I have a number like 123.45 since it has 2 digits of precision, so the string will be 123.45 even though I would like to see 123.

Now the obvious brutal way would be to use a string subset and only keep the first 3 digits (I guarantee that my number is never bigger than 999). But I really hope there is a more elegant way. I can't imagine that nobody has run into this requirement before. How did you tackle it?

Since you're facing a "cosmetic" issue, string manipulation seems OK. If you need rounding, you'll have to get really clever and maybe count how many characters exist to the left of the decimal and use number to fractional string.

It's not just a cosmetic issue, the string is sent to a serial device through VISA at quite a high rate (up to 10ms) so I want to find the most optimized solution...

Compare the magnitude of the number and then choose between %f and %_f.  At three digits any value between -0.001 and 0.001 would get %f (fixed precision), everything else gets %_f (significant digits).  I may be off a zero, but the premise remains.

Even at 2400 baud, you should be able to easily send 10 characters in 10ms.

Your requirement indicates 4 characters if we include the conditional decimal point. Add in a terminator and maybe a U16 as a message index and you should still be fine.

The question is, what does the other end accept? Is it another LabVIEW app, a SCPI instrument or something like an Arduino with limited resources?

LabVIEW to LabVIEW could use SI notation (%_3p) which would always be exactly 4 characters for the data.

SCPI devices normally include support for scientific notation (%_3e) which would always be 7 characters in length.

If you have a custom system, you will need to understand the parsing routine or capabilities in order to make the best choice.

If you are writing the remote device code, simply multiply your value by 100 in LabVIEW and send the value as 00000 to 99999 and divide by 100 on the remote side.

Thank you all for your answers. The device I'm talking to is an Arduino with strict parsing, and the firmware code takes only floating numbers. I can't always multiply/divide by 100 since we want more precision when the number is small (0.123) and less precision when the number is big (12.3). Like you said Phillip, the decimal point is also a character...

I'll probably go with Sparc's method : format differently, based on the amplitude of the value, even though I wanted to avoid extra checks... Too bad there isn't a 3rd choice in the formatting option:

1) Number of significant digits (%_3f)

2) Number of digits of precision (%.3f)

3) Maximum number of digits (maybe %*3f or whatever else)

Edited by Manudelavega

## Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

×   Pasted as rich text.   Paste as plain text instead

Only 75 emoji are allowed.

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
• ### Similar Content

• #### combo box Indexing combo Box for both value and String

By Mahbod Morshedi,

• 8 replies
• 5,639 views
• #### Is it possible to store HexString in INI file

By nagesh,

• 2 replies
• 2,222 views
• #### Simple string in and out of a DLL created with LabVIEW

By Randy_S,

• 3 replies
• 3,281 views
• #### Reading HEX file into LabVIEW...

By piZviZ,

• 5 replies
• 10,273 views
• #### Send string from LabVIEW to ARDUINO via serial port

By Majo,

• 6 replies
• 22,942 views
×