DLGCreateRealField中的格式和宽度代表什么

问题描述

formatwidthDLGCreateRealField(number value,number width,number format)对话框功能中代表什么?该文档未对此进行任何说明。

解决方法

TL; DR /大多数情况下

width是对话框中输入字段的显示宽度。

format告诉总共位数,以显示小数点后至少保留一位数字。输入仅在初始状态和返回值上设置为格式,但仅当输入更改时才设置格式(更多例外,请参见下文)。用户可以输入自己想要的数字。该值是四舍五入的。 示例:对于format=3,值1.234显示为1.23;值123.456显示为123.4

请注意,下面提到了一些奇怪的极端情况。


意外行为摘要

  1. 返回值仅在触摸输入时正确格式化/舍入(否则为6位数)
  2. 如果输入的小数点分隔符前有6位数字(无论哪种格式),返回值都不会四舍五入
  3. 如果显示的值大于100000000(无论哪种格式),显示的值将转换为指数符号(例如1.2e8

详细信息

Example Dialog

该图显示了使用以下代码创建的示例对话框。前三个输入的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");
}

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...