DLGCreateRealField中的格式和宽度代表什么
What does the format and width stand for in DLGCreateRealField
format
和width
在DLGCreateRealField(number value, number width, number format)
对话框功能中代表什么?文档对此没有任何说明。
TL;DR / 大多数情况
width
是输入框在对话框中的显示宽度
format
表示总共显示多少位小数点后至少保留一位。输入仅在初始状态 和 return 值 上格式化,但仅当输入更改时(还有一些例外情况,请参见下文)。用户可以键入 she/he 想要的任意数量的数字。该值是四舍五入的。 示例: 对于 format=3
,值 1.234
显示为 1.23
;值 123.456
显示为 123.4
.
请注意,下面提到了一些奇怪的极端情况。
意外行为摘要
- Return 值仅在输入被触摸时正确 formatted/rounded(否则为 6 位数字)
- Return 如果输入的小数点前正好有 6 位数字(无论哪种格式),则值不四舍五入
- 如果值大于 100 000 000(无论哪种格式),显示的值将转换为指数表示法(例如
1.2e8
)
详情
该图显示了使用以下代码创建的示例对话框。前三个输入的width
为8,后三个输入的width
为16。这个很容易理解。
现在 format
:每个输入的 format
等于其标签。第一个输入 format
是 2,最后一个输入 format
是 9。创建时 输入显示的数字与指定的一样多,但小数点后至少有一位分隔器。对于第一个输入,总共是两位数。但是因为 12 已经包含两位数字,所以保留小数点后的第一位数字。所有其他输入都显示此行为,因为总数永远不会超过指定的数字。正如您在 Seven 上看到的那样,数字是 四舍五入 ,而不是截断。
用户可以输入 she/he 想要的数字。 (只允许数字、e
、减号和点。第二个点之后的所有字符都将被忽略。)
如果用户不做任何更改并按下 OK
,returned 值将按照上述规则四舍五入到 6 位数字。一旦触摸输入(也输入一个数字然后立即将其删除就足够了),输入将在 format
上四舍五入...除非输入中的值在小数分隔符。然后它被 returned 作为一个整数,初始值的格式仍然正确。呸...
请注意,在某些时候,数字会转换为指数表示法。也在输入字段中!这意味着值 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:", val3tg, 12.123456789123, 8, 3));
DLGitems.DLGAddElement(DLGCreateRealField("Four: ", val4tg, 12.123456789123, 8, 4));
DLGitems.DLGAddElement(DLGCreateRealField("Five: ", val5tg, 12.123456789123, 16, 5));
DLGitems.DLGAddElement(DLGCreateRealField("Seven:", val7tg, 12.123456789123, 16, 7));
DLGitems.DLGAddElement(DLGCreateRealField("Nine: ", val9tg, 12.123456789123, 16, 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");
}
format
和width
在DLGCreateRealField(number value, number width, number format)
对话框功能中代表什么?文档对此没有任何说明。
TL;DR / 大多数情况
width
是输入框在对话框中的显示宽度
format
表示总共显示多少位小数点后至少保留一位。输入仅在初始状态 和 return 值 上格式化,但仅当输入更改时(还有一些例外情况,请参见下文)。用户可以键入 she/he 想要的任意数量的数字。该值是四舍五入的。 示例: 对于 format=3
,值 1.234
显示为 1.23
;值 123.456
显示为 123.4
.
请注意,下面提到了一些奇怪的极端情况。
意外行为摘要
- Return 值仅在输入被触摸时正确 formatted/rounded(否则为 6 位数字)
- Return 如果输入的小数点前正好有 6 位数字(无论哪种格式),则值不四舍五入
- 如果值大于 100 000 000(无论哪种格式),显示的值将转换为指数表示法(例如
1.2e8
)
详情
该图显示了使用以下代码创建的示例对话框。前三个输入的width
为8,后三个输入的width
为16。这个很容易理解。
现在 format
:每个输入的 format
等于其标签。第一个输入 format
是 2,最后一个输入 format
是 9。创建时 输入显示的数字与指定的一样多,但小数点后至少有一位分隔器。对于第一个输入,总共是两位数。但是因为 12 已经包含两位数字,所以保留小数点后的第一位数字。所有其他输入都显示此行为,因为总数永远不会超过指定的数字。正如您在 Seven 上看到的那样,数字是 四舍五入 ,而不是截断。
用户可以输入 she/he 想要的数字。 (只允许数字、e
、减号和点。第二个点之后的所有字符都将被忽略。)
如果用户不做任何更改并按下 OK
,returned 值将按照上述规则四舍五入到 6 位数字。一旦触摸输入(也输入一个数字然后立即将其删除就足够了),输入将在 format
上四舍五入...除非输入中的值在小数分隔符。然后它被 returned 作为一个整数,初始值的格式仍然正确。呸...
请注意,在某些时候,数字会转换为指数表示法。也在输入字段中!这意味着值 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:", val3tg, 12.123456789123, 8, 3));
DLGitems.DLGAddElement(DLGCreateRealField("Four: ", val4tg, 12.123456789123, 8, 4));
DLGitems.DLGAddElement(DLGCreateRealField("Five: ", val5tg, 12.123456789123, 16, 5));
DLGitems.DLGAddElement(DLGCreateRealField("Seven:", val7tg, 12.123456789123, 16, 7));
DLGitems.DLGAddElement(DLGCreateRealField("Nine: ", val9tg, 12.123456789123, 16, 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");
}