dialog - 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 位,则返回值不四舍五入(无论哪种格式)
1.2e8
如果值大于 100 000 000(无论哪种格式),显示的值将转换为指数表示法(例如)
细节
该图显示了使用以下代码创建的示例对话框。前三个输入有width
8 个,后三个输入有width
16 个。这很容易理解。
现在format
: 每个输入都format
等于它的标签。第一个输入format
是 2,最后一个输入format
是 9。在创建时,输入显示与指定一样多的数字,但小数分隔符后至少显示一个数字。对于第一个输入,总共是两位数。但因为 12 已经包含两位数,所以保留小数分隔符后的第一位。所有其他输入都显示此行为,因为总数字永远不会超过指定的数字。正如您在7上看到的那样,数字是四舍五入的,而不仅仅是截断的。
用户可以输入任意数量的数字。(只e
允许数字、、减号和点。第二个点之后的所有字符都被忽略。)
如果用户没有更改任何内容并按下OK
,则返回值将按照上述规则四舍五入到 6 位。一旦触摸输入(也输入一位数字然后立即删除就足够了),输入将在format
...上四舍五入,除非输入中的值在小数点分隔符前正好有 6 位数字。然后它作为一个整数返回,初始值的格式仍然正确。呸...
请注意,在某些时候,数字会转换为指数符号。也在输入字段中!这意味着该值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");
}
推荐阅读
- ios - Ionic 4 - 当我在 iOS 中运行应用程序时,Api 调用不起作用
- ruby-on-rails - Order multiple images by filename in Active storage Rails 5.2
- typescript - NestJS 5 GraphQL 错误查询在解析器中定义,但不在模式中
- c - 创建临时目录的可靠方法
- ios - 我们可以在模拟器上运行 ios release build 以进行自动化测试吗
- javascript - 如何在 Vue 的单个文件组件中使用那种 TypeScript?
- spring-boot - Spring Cloud Stream Configuration 类未加载
- c# - 检测视频上传 YouTube API
- android - Google Play 显示内部测试 生产中的新功能
- drupal-7 - 将默认值设置为输入字段drupal 7