MATLAB: How to modify number of characters for numeric values in a cell array

cell arraycharacter length

Within a cell array, I would like to limit the number of characters allowed in each cell to 6. If the cell has more than 6 characters, I would like to remove the characters off of the end. i.e.
n_raw =
[ 0.023391]
[ 0.31236]
[ 0.0073958]
[ 0.6252]
[ 14.158]
[ 14.159]
[ 0.046701]
[ 0.095463]
to
n_raw =
[ 0.0233]
[ 0.3123]
[ 0.0073]
[ 0.6252]
[ 14.158]
[ 14.159]
[ 0.0467]
[ 0.0954]

Best Answer

Under the assumption that each entry in the cell is a column vector, and cell itself is a column vector, but not assuming that each entry is a scalar:
n_raw = {
0.023391
0.31236
0.0073958
0.6252
14.158
-14.159
0.046701
0.095463 };
rv = vertcat(n_raw{:});
new_n_raw = mat2cell( floor(abs(rv) * 10000) / 10000 .* sign(rv), cellfun(@length, n_raw), 1);
Note, however, that the only fractions that can be represented exactly in 4 decimal digits are the integer multiples of 1/16 (e.g., 5/16 or 6/16 = 3/8 can be represented exactly in 4 decimal digits, but 11/32 cannot be represented exactly in 4 decimal digits.) In all other cases, the rounding to 4 decimal digits will only look to work. For example, what looks like 0.023391 rounded to what looks like 0.0233 would actually become 0.02330000000000000126565424807267845608294010162353515625