文件交换

图像缩略图

NUM2ENG:快速数工程符号(SI)转换

数字转换为工程符号。

2个下载

更新2017年11月29日

查看许可协议

工程符号与科学符号相似,除了一点
的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中央文件交换。检索

评论和评分(6)

HarryDymond

卡尔是正确的——工程符号是科学符号,其指数被限制为3的整数倍。对于那些需要实际工程符号,我的num2eng函数也处理矢量/矩阵输入,并提供工程符号和SI前缀:

https://uk.mathworks.com/matlabcentral/fileexchange/67740-num2eng

卡尔Witthoft

“k”和“基洛”没有工程符号。工程严格X.YYYYexp(J)格式。ISO标准建议不要像“4.7 K”为无单位的项目。添加实际维度名称(长度,吊坠等)是一个独立的业务。

@Stephen Cobeldick
谢谢你给我的反馈。我在我的1.2版本中阐述了您的观点。
我怀疑你的性能测试是在标量输入完成。此功能在这种情况下,表现出相当大的开销。随着多个号码虽然转换,对我实施矢量通话确实比所有其他类型的我可以找到关于FEX,它必须与使用更快的for循环或arrayfun。

声明:最后,对于我所尝试的各种测试用例,我找不到任何FEX提交提供正确的输出,因此我最终编写了自己的函数。可以在这里找到:

//www.tatmou.com/matlabcentral/fileexchange/33174

PS:后缀范围外的值也缺少尾随空格字符,例如1e32 - > '100 E30',而应该是 '100e30'(以下纠正我的意见)。尾随空格需要允许单元的直接连接来给出正确的符合SI-串,例如'1和K' + 'N' - > '1千牛',并因此也 '100e30' + 'N' - > '100e30 N'。

一个很好的介绍和解释清楚功能,与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符号的标准方式。

总的来说,这是一个很好的函数有可能成为一个很好的函数。我喜欢这些选择。

更新

1.2.4.3

错字bug修复

1.2.4.2

修正了输入值非常接近于零的错误处理。

1.2.4.1

更新缩略图

1.2.4.0

- 增加写出台自动多元化
- 增加了“NoPlural”选项
-在描述中增加了示例
- 改进的性能略

1.2.3.1

改进的输入解析性能

1.2.3.0

警告发出改进

1.2.2.2

对标和非标量输入改进的性能。

1.2.2.1

固定错误的间距为数字打印在指数形式。

1.2.2.0

- 增加了“单位”选项
- 更名为“FullNames”选项设置为“全名”

1.2.1.1

再次修正标题,FEX是错误的

1.2.1.0

- 增加略有性能的标量输入
- 与性能考虑更新说明
- 在一些极端情况修正了处理的投入

1.2.0.1

固定的错误的标题

1.2.0.0

- 在情况下固定输出其中的位数四舍五入增加,由于
-增加了对NaN金宝app和无限值的支持
- 小小的性能优化

1.1.1.0

- BUG修复与第二输出
- 改善说明

1.1.0.0

-增加双输出形式
- 修正和更新说明

MATLAB版本兼容性
创建与R2007b
与任何版本兼容
平台的兼容性
视窗 苹果系统 Linux
确认

启发:数以科学前缀

启发:num2eng