Str2num:完全相同的转换gydF4y2Ba

15的观点(30天)gydF4y2Ba
Xiaohan杜gydF4y2Ba
Xiaohan杜gydF4y2Ba 2018年3月3日gydF4y2Ba
评论道:gydF4y2Ba Stephen23gydF4y2Ba 2018年3月4日gydF4y2Ba
你好,gydF4y2Ba
这样简单的问题:我有一个字符串:gydF4y2Ba
rawStrMod =gydF4y2Ba“0.0000000001、0.3”gydF4y2Ba
我用str2num转化成数字,gydF4y2Ba
> > str2num (rawStrMod)gydF4y2Ba
ans =gydF4y2Ba
0.000000000100000 - 0.300000000000000gydF4y2Ba
它给我0.000000000100000,而不是0.0000000001一模一样。在这里我使用格式。如果我改变格式短g,它给我:gydF4y2Ba
> >格式短gydF4y2BaggydF4y2Ba
> > str2num (rawStrMod)gydF4y2Ba
ans =gydF4y2Ba
1平台以及0.3gydF4y2Ba
我怎么能得到0.0000000001 ?gydF4y2Ba
2的评论gydF4y2Ba
Stephen23gydF4y2Ba
Stephen23gydF4y2Ba 2018年3月4日gydF4y2Ba
“我怎么能得到0.0000000001 ?”gydF4y2Ba
商店是不可能的gydF4y2Ba 0.0000000001gydF4y2Ba 使用二进制浮点数。gydF4y2Ba

登录置评。gydF4y2Ba

接受的答案gydF4y2Ba

沃尔特·罗伯森gydF4y2Ba
沃尔特·罗伯森gydF4y2Ba 2018年3月3日gydF4y2Ba
rawStrMod =gydF4y2Ba“0.0000000001、0.3”gydF4y2Ba;gydF4y2Ba
“它给我0.000000000100000,而不是0.0000000001一模一样。”gydF4y2Ba
忽略格式问题,没有一个Mathworks工具箱能够给你gydF4y2Ba 完全gydF4y2Ba 与0.0000000001相同。MATLAB 0.0000000001不能存储gydF4y2Ba 完全gydF4y2Ba 在二进制浮点数:最接近它可以在二进制浮点数是0.00000000010000000000000000364321973154977415791655470655996396089904010295867919921875gydF4y2Ba
最接近Mathworks工具可以通过使用符号工具箱,为信谊(0.0000000001)给你的东西gydF4y2Ba 更紧密的gydF4y2Ba 比你可以得到0.0000000001没有符号工具箱,但如果你调查足够努力你可以证明信谊(0.0000000001)实现为一个二进制的比例渐近精度有限的截断10/3位/数字精度要求(log2(10)可能会,但模型是10/3:一些比特用于开销扩展精度值。)gydF4y2Ba
一切只是格式(也许跟踪大小)。只有少数格式化选项可供默认的数字显示。什么你应该使用sprintf()或流()好详细的显示。gydF4y2Ba
rawStrMod =gydF4y2Ba0.0000000001,0.3,0.0000000001000,123gydF4y2Ba;gydF4y2Ba
T = regexp (rawStrModgydF4y2Ba“\ s * \ *”gydF4y2Ba,gydF4y2Ba“分裂”gydF4y2Ba);gydF4y2Ba
T_numeric = str2double (T);gydF4y2Ba
T_input_digits = cellfun (@length regexprep (T) {gydF4y2Ba" ^[^]*美元”gydF4y2Ba,gydF4y2Ba“^ . * \”。gydF4y2Ba},{gydF4y2Ba”gydF4y2Ba,gydF4y2Ba”gydF4y2Ba},gydF4y2Ba“一次”gydF4y2Ba,gydF4y2Ba“lineanchors”gydF4y2Ba));gydF4y2Ba
T_data = num2cell ([T_input_digits (:), T_numeric (:))。”);gydF4y2Ba
流(gydF4y2Ba“% * f。\ n”gydF4y2Ba,T_data {:});gydF4y2Ba
输出是gydF4y2Ba
0.0000000001gydF4y2Ba
0.3gydF4y2Ba
0.0000000001000gydF4y2Ba
123年gydF4y2Ba
输入转换为数字(T_numeric),但是小数点后的数量跟踪,这个数字是用来格式化输出。gydF4y2Ba
这段代码有一个微妙的问题:gydF4y2Ba
  • 如果你有一个整数就像123,那么这是完全合理的,输出不应该包含一个十进制的地方,像这里发生了,小数点后被检测到的数量是0gydF4y2Ba
  • 然而,如果123年而不是123年。没有小数点后位数后,小数点后的数量会被认为是0,和当被告知使用0位小数,% f格式项不把小数点之后,在123年的水平。将打印出123 123无法实现的代码格式输入不同于123年。在输入。gydF4y2Ba

更多的答案(0)gydF4y2Ba

类别gydF4y2Ba

找到更多的在gydF4y2Ba数据类型转换gydF4y2Ba在gydF4y2Ba帮助中心gydF4y2Ba和gydF4y2Ba文件交换gydF4y2Ba

社区寻宝gydF4y2Ba

找到宝藏在MATLAB中央,发现社区如何帮助你!gydF4y2Ba

开始狩猎!gydF4y2Ba