工程符号与科学符号相似,除了一点
的10的指数功率总是为3的整数倍,并且
尾数被标定,因此它位于内[0,1000)。范围
指数的其中SI-prefix是可以去10 ^ -24〜10 ^ 24。
例子(标量输入):
- num2eng (4700)
ANS = '4.7 K'
- num2eng(82000,[1 4], 'FullName',true)
ANS = '82公斤”
- num2eng(1000,4)
ANS = '1.000 K'
- num2eng(-3.527e6,3)
ANS = '-3.53 M'
- num2eng(9999,[1 2])
ANS = '10 K”
- num2eng(999,3)
ans = ' 999 '
- num2eng(100, 'ForceExponent',3)
ANS = '0.1 K'
- [ '距离:',num2eng(4.2e4, '全名',真正的 '单元', '米')
ans = '距离:42公里'
- [ '距离:',num2eng(1E3, '全名',真正的 '单元', '米')
ANS =“距离:1公里”
句法:
ENG = num2eng(NUM)返回包含工程的字符串
“民”的符号。“NUM”可以是任何数值标量,矢量或
矩阵。如果输入不是标量,则输出是带有
与输入的形状相同。有效数字的数目
默认为最多5( 'sigfigs'= [1 5])。输出包含一个
数字和前缀部分之间有空格,但没有空格
尾部空格。
__ = num2eng(NUM,sigfigs)给出控制的数
在输出显著数字。sigfigs必须为正。它可以
可以是标量或描述[最小最大值]的二元向量。在
后者的情况下尾随零,如果适用的话,删去。
允许用户指定一个或
多个选项生效:
- 'SynchronizeExponents':(假)/ '分'/ '最大值'/ '位'
使输出到全部具有相同的SI-前缀/指数。该
此值(“最小”,“最大”或“中间”)确定什么
当NUM值的变化的顺序的选择SI-前缀
大小。
- 'ForceExponent': (false) / [exp] / [min max]
强制所有输出有一个定的指数或束缚他们
在给定的最小和最大指数范围内。指数
值必须是3的倍数。如果存在此选项,
“SynchronizeExponents”被忽略。
- 'DistinctOutput':(假)/真
保证不同的输出。的显著的最大数量
为实现这一目标,需要增加数字。
- 'OmitSpace':(假)/真
省略的数量和SI前缀之间的空白。这个
如果有两个输出参数选项将被忽略。
- ` FullName: (false) /真
写前缀作为全名,而不是一个字母
缩写。
——“单位”:(假)/‘单位’/{‘第一’,‘unit2’,…}
将给定的单元字符串附加到输出。如果一个单元阵列
是提供,它必须具有相同数量的元件作为的
'NUM' 输入。如果必要的话“重塑”被称为匹配
“num”的形状。每个单元字符串由“strtrim”处理。
写出来的单位应在单数形式给出。每当
输出的值不是“1”,在后面附加一个复数“s”
单元串。如果有两个输出参数和指数
被强制一个单一的值(通过选项“ForceExponent”
与单个指数或通过“SynchronizeExponents”),“(S)”
或者's'附加到第二个输出,这取决于,
但不是所有的,或所有的印刷值不是“1”。没有复数的“
如果单元串已经以“s”的端部被附加。
- 'NoPlural':(假)/真
禁用的复数的“S”到本机的自动追加。
如果全名是无效的藏汉此选项将被忽略。
所有选项默认为false,它禁用它们。选项
只要不咄咄逼人,名字可以缩写。
一个短名称的工作集是“sync”,“force”,“distinct”,
“省略”,“全”,“单元”和“NOP”。最短的一组
名字是's', 'fo', ' d', 'fu', 'u'和'n'。
[NUM,SIP] = num2eng(NUM,__)返回数和SI-前缀部分
分别。无论是部分包含一个空格。如果输入“NUM”
是不是标量,则输出“NUM”是一个cellstring。“SIP”是一个
cellstring如果输入“NUM”不是标量,在指数
输出不强制为单个值(通过选项)
'SynchronizeExponents'或'ForceExponent',[exp])。
为了获得更大的信息,看看帮助块内num2eng.m。
罗马Muller-Hainbach (2020)。NUM2ENG:快速数工程符号(SI)转换(//www.tatmou.com/matlabcentral/fileexchange/63928-num2eng-fast- numberto - engineering-noting-si-conversion), MATLAB中央文件交换。检索。
1.2.4.3 | 错字bug修复 |
|
1.2.4.2 | 修正了输入值非常接近于零的错误处理。 |
|
1.2.4.1 | 更新缩略图 |
|
1.2.4.0 | - 增加写出台自动多元化 |
|
1.2.3.1 | 改进的输入解析性能 |
|
1.2.3.0 | 警告发出改进 |
|
1.2.2.2 | 对标和非标量输入改进的性能。 |
|
1.2.2.1 | 固定错误的间距为数字打印在指数形式。 |
|
1.2.2.0 | - 增加了“单位”选项 |
|
1.2.1.1 | 再次修正标题,FEX是错误的 |
|
1.2.1.0 | - 增加略有性能的标量输入 |
|
1.2.0.1 | 固定的错误的标题 |
|
1.2.0.0 | - 在情况下固定输出其中的位数四舍五入增加,由于 |
|
1.1.1.0 | - BUG修复与第二输出 |
|
1.1.0.0 | -增加双输出形式 |
HarryDymond(查看资料)
卡尔是正确的——工程符号是科学符号,其指数被限制为3的整数倍。对于那些需要实际工程符号,我的num2eng函数也处理矢量/矩阵输入,并提供工程符号和SI前缀:
https://uk.mathworks.com/matlabcentral/fileexchange/67740-num2eng
卡尔Witthoft(查看资料)
“k”和“基洛”没有工程符号。工程严格X.YYYYexp(J)格式。ISO标准建议不要像“4.7 K”为无单位的项目。添加实际维度名称(长度,吊坠等)是一个独立的业务。
罗马穆勒 - Hainbach(查看资料)
@Stephen Cobeldick
谢谢你给我的反馈。我在我的1.2版本中阐述了您的观点。
我怀疑你的性能测试是在标量输入完成。此功能在这种情况下,表现出相当大的开销。随着多个号码虽然转换,对我实施矢量通话确实比所有其他类型的我可以找到关于FEX,它必须与使用更快的for循环或arrayfun。
斯蒂芬Cobeldick(查看资料)
声明:最后,对于我所尝试的各种测试用例,我找不到任何FEX提交提供正确的输出,因此我最终编写了自己的函数。可以在这里找到:
//www.tatmou.com/matlabcentral/fileexchange/33174
斯蒂芬Cobeldick(查看资料)
PS:后缀范围外的值也缺少尾随空格字符,例如1e32 - > '100 E30',而应该是 '100e30'(以下纠正我的意见)。尾随空格需要允许单元的直接连接来给出正确的符合SI-串,例如'1和K' + 'N' - > '1千牛',并因此也 '100e30' + 'N' - > '100e30 N'。
斯蒂芬Cobeldick(查看资料)
一个很好的介绍和解释清楚功能,与H1线,清晰的帮助和说明。彻底输入检查和大量的选项,使其非常方便。
可以对代码进行整理,特别是在输入检查期间奇怪的缩进和尾随空格,以及开关情况的奇怪顺序:既不按字母排序,也不按值排序。
然而,它不处理天道酬勤,-Inf,楠:因为这不能处理天道酬勤投入别人的代码可能只会失败。更好地让用户决定他们是否愿意INF / NaN的是一个错误或没有。
相反的是在标题中作者指出,这是最慢的所有“数SI前缀”意见书,我已经测试(七喜提交为止!),平均每通话略超过2毫秒。但是大部分我测试在每次通话少于0.5毫秒运行的其他有关材料。在标题中注明“快”的显著位置非常误导,并显著带来了我的评价了。难道笔者比较实际运行时针对任何其他NUM到SI /公制意见?
在某些情况下也会出现不正确的输出。当输入值四舍五入到下一个SI前缀时,该函数使用了错误的后缀。例如:num2eng(999,1)返回'1000',但是它应该是'1 k',或者num2eng(999999,3)->'1000 k',但是它应该是'1 M'。在这种情况下,数字的数量也不正确,例如:num2eng(999999,4)->'1000.0 k',它有五个有效数字,而不是请求的四个。当没有后缀时(值小于1e-25或大于1e30),这个函数返回一个e符号数,但是奇怪地在值和'e'字符之间添加一个空格字符,例如1e32 -> '100e30',但应该是'100e30',这是写e符号的标准方式。
总的来说,这是一个很好的函数有可能成为一个很好的函数。我喜欢这些选择。