round off problem in matlab
2 次查看(过去 30 天)
显示 更早的评论
I have 4 variables each have 4 values (1x4) in it and I want to store all in value in 1 variable (4x4) but values are change when i do it.
MAV = [0.0924317411754942 0.0313003411430704 0.00365072354007141 0.00332056432198707]
waveLen = [172.697769103870 68.7603283596702 69.2536410243476 63.2141284111186]
zcdOut = [560 719 6155 6260]
slope_count = [478 212 4949 4830]
HG0_extracted_feature = [waveLen; MAV; zcdOut; slope_count]
it gives
173 69 69 63
0 0 0 0
560 719 6155 6260
478 212 4949 4830
note MAV values become zero, it round off waveLen, etc values...
how i correct it?
Thank you
0 个评论
采纳的回答
Steven Lord
2019-9-19
Based on that display I suspect one or both of the variables zcdOut or slope_count are stored in an integer class. When you combine data stored in an integer class with data stored in a non-integer class, "all elements of the resulting matrix are given the data type of the left-most integer".
Consider converting the variable stored in an integer class to double before combining them into one array, so that the resulting matrix is also a double.
4 个评论
Steven Lord
2019-9-22
Check the types of variables using class or whos.
As Stephen Cobeldick said, to convert variables to double use the double function.
更多回答(2 个)
Raj
2019-9-19
Just add 'format longg' before your code like this:
format longg
MAV = [0.0924317411754942 0.0313003411430704 0.00365072354007141 0.00332056432198707]
waveLen = [172.697769103870 68.7603283596702 69.2536410243476 63.2141284111186]
zcdOut = [560 719 6155 6260]
slope_count = [478 212 4949 4830]
HG0_extracted_feature = [waveLen; MAV; zcdOut; slope_count]
Read about format here:
Matt J
2019-9-19
编辑:Matt J
2019-9-19
The values are not changed. They are just displayed to the screen to 4 decimal points. Use format long to see more precision. Also, note that all elements are premultiplied by 1000.
3 个评论
Matt J
2019-9-20
As Steven. mentioned, that is probably because one of the vectors you are merging is uint8 or similar.
Steven Lord
2019-9-20
Rows 3 and 4 of the resulting array have values too large for uint8 or int8 so they would need to be at least 16-bit integers.
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Function Creation 的更多信息
产品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!