如何解决DLGCreateRealField中的格式和宽度代表什么
format
和width
在DLGCreateRealField(number value,number width,number format)
对话框功能中代表什么?该文档未对此进行任何说明。
解决方法
TL; DR /大多数情况下
width
是对话框中输入字段的显示宽度。
format
告诉总共位数,以显示小数点后至少保留一位数字。输入仅在初始状态和返回值上设置为格式,但仅当输入更改时才设置格式(更多例外,请参见下文)。用户可以输入自己想要的数字。该值是四舍五入的。 示例:对于format=3
,值1.234
显示为1.23
;值123.456
显示为123.4
。
请注意,下面提到了一些奇怪的极端情况。
意外行为摘要
- 返回值仅在触摸输入时正确格式化/舍入(否则为6位数)
- 如果输入的小数点分隔符前有6位数字(无论哪种格式),返回值都不会四舍五入
- 如果显示的值大于100000000(无论哪种格式),显示的值将转换为指数符号(例如
1.2e8
)
详细信息
该图显示了使用以下代码创建的示例对话框。前三个输入的width
为8,后三个输入的width
为16。这很容易理解。
现在format
:每个输入的format
等于其标签。前一个输入format
为2,后一个输入format
为9。对于第一个输入,这是总共两位数。但是因为12已经包含两位数字,所以保留了小数点分隔符之后的第一位数字。所有其他输入均显示此行为,因为总位数永远不会超过指定的位数。如您在七个上看到的那样,该数字是四舍五入的,而不仅仅是截断的。
用户可以输入自己想要的数字。 (仅允许数字e
,减号和点。第二个点后的所有字符都将被忽略。)
如果用户未进行任何更改并按OK
,则返回值将按照上述规则四舍五入为6位数字。只要一触摸输入(也输入一位数字然后立即将其删除就足够了),则输入将在format
上四舍五入...除非输入中的值在输入之前精确地是6位小数点分隔符。然后将其作为整数返回,初始值仍会正确设置格式。 ew ...
请注意,在某些时候,数字会转换为指数符号。也在输入栏中!这意味着值123456789
显示为1.23456789e+8
。指数符号再次遵循format
规则(不计算指数位数)。这意味着在带有format=2
的第一个输入字段中,该值显示为1.2e+8
。
以下代码用于创建屏幕截图。
TagGroup DLG,DLGItems;
DLG = DLGCreateDialog( "Please enter values",DLGItems);
TagGroup val2tg,val3tg,val4tg,val5tg,val7tg,val9tg;
DLGitems.DLGAddElement(DLGCreateRealField("Two: ",val2tg,12.123456789123,8,2));
DLGitems.DLGAddElement(DLGCreateRealField("Three:",3));
DLGitems.DLGAddElement(DLGCreateRealField("Four: ",4));
DLGitems.DLGAddElement(DLGCreateRealField("Five: ",16,5));
DLGitems.DLGAddElement(DLGCreateRealField("Seven:",7));
DLGitems.DLGAddElement(DLGCreateRealField("Nine: ",val9tg,9));
object dialog = alloc(UIFrame).init(DLG);
if(dialog.pose()){
Result("\n= = =\n");
Result("Two: " + val2tg.DLGGetValue() + "\n");
Result("Three: " + val3tg.DLGGetValue() + "\n");
Result("Four: " + val4tg.DLGGetValue() + "\n");
Result("Five: " + val5tg.DLGGetValue() + "\n");
Result("Seven: " + val7tg.DLGGetValue() + "\n");
Result("Nine: " + val9tg.DLGGetValue() + "\n");
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。