当前位置:   article > 正文

鸿蒙开发———黑马健康app(数字键盘)_鸿蒙开发的parsefloat

鸿蒙开发的parsefloat

使用 Grid 组件创建网格布局,用于展示数字键盘的按钮。用 ForEach 遍历 numbers 数组,并为每个数字创建 GridItem 和 Text 组件作为按钮。为删除操作创建一个特别的 GridItem,显示“删除”文字。为每个数字按钮和删除按钮添加 onClick 事件处理器,用 clickNumber 和 clickDelete 方法。clickNumber 方法处理数字按钮的点击事件,将点击的数字添加到当前值,并进行格式校验和数值更新。clickDelete 方法处理删除按钮的点击事件,从当前值中移除最后一个字符,并更新数值。parseFloat 方法用于将字符串转换为浮点数,去除字符串末尾的小数点。在 clickNumber 中,检查输入的字符串是否符合预期的数值格式,确保不会输入超过两个小数点的数字如果输入的数值超过 999.9,将其限制在 999.0

  1. import { CommonConstants } from '../../common/constants/CommonConstants'
  2. @Component
  3. export default struct NumberKeyboard {
  4. // numbers 数组包含数字键盘上的所有字符,包括数字 0-9 和一个小数点。
  5. numbers: string[] = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '.']
  6. @Link amount: number
  7. @Link value: string
  8. // keyBoxStyle 方法定义了数字键盘按钮的样式。
  9. @Styles keyBoxStyle(){
  10. .backgroundColor(Color.White) // 设置按钮背景颜色为白色。
  11. .borderRadius(8) // 设置按钮圆角为 8
  12. .height(60) // 设置按钮高度为 60
  13. }
  14. // build 方法用于构建数字键盘的 UI 布局。
  15. build() {
  16. // 使用 Grid 组件创建网格布局。
  17. Grid(){
  18. // 使用 ForEach 遍历 numbers 数组,为每个数字创建一个 GridItem。
  19. ForEach(this.numbers, num => {
  20. GridItem(){
  21. // 在每个 GridItem 中创建一个显示数字的 Text 组件。
  22. Text(num).fontSize(20).fontWeight(CommonConstants.FONT_WEIGHT_900)
  23. }
  24. // 应用键盘按钮样式。
  25. .keyBoxStyle()
  26. // 为数字按钮添加点击事件。
  27. .onClick(() => this.clickNumber(num))
  28. })
  29. // 为删除按钮创建一个 GridItem。
  30. GridItem(){
  31. Text('删除').fontSize(20).fontWeight(CommonConstants.FONT_WEIGHT_900)
  32. }
  33. // 应用键盘按钮样式到删除按钮。
  34. .keyBoxStyle()
  35. // 为删除按钮添加点击事件。
  36. .onClick(() => this.clickDelete())
  37. }
  38. .width('100%')
  39. .height(280)
  40. .backgroundColor($r('app.color.index_page_background'))
  41. .columnsTemplate('1fr 1fr 1fr')
  42. .columnsGap(8)
  43. .rowsGap(8)
  44. .padding(8)
  45. .margin({top: 10})
  46. }
  47. // clickNumber 方法处理数字按钮的点击事件。
  48. clickNumber(num: string){
  49. // 拼接用户输入的内容。
  50. let val = this.value + num
  51. // 校验输入格式是否正确,确保不超过一个点且点不在字符串末尾。
  52. let firstIndex = val.indexOf('.')
  53. let lastIndex = val.lastIndexOf('.')
  54. if(firstIndex !== lastIndex || (lastIndex != -1 && lastIndex < val.length - 2)){
  55. // 如果输入非法,则不进行操作。
  56. return
  57. }
  58. // 将字符串转换为数值。
  59. let amount = this.parseFloat(val)
  60. // 如果数值大于等于 999.9,则设置为 999.0
  61. if(amount >= 999.9){
  62. this.amount = 999.0
  63. this.value = '999'
  64. }else{
  65. // 否则,更新数值和字符串值。
  66. this.amount = amount
  67. this.value = val
  68. }
  69. }
  70. // clickDelete 方法处理删除按钮的点击事件。
  71. clickDelete(){
  72. // 如果当前没有输入内容,则清空 value 和 amount。
  73. if(this.value.length <= 0){
  74. this.value = ''
  75. this.amount = 0
  76. return
  77. }
  78. // 否则,删除当前输入的最后一个字符,并更新数值。
  79. this.value = this.value.substring(0, this.value.length - 1)
  80. this.amount = this.parseFloat(this.value)
  81. }
  82. // parseFloat 方法尝试将字符串转换为浮点数。
  83. parseFloat(str: string){
  84. // 如果字符串为空,则返回 0
  85. if(!str){
  86. return 0
  87. }
  88. // 如果字符串以点结尾,则去掉点。
  89. if(str.endsWith('.')){
  90. str = str.substring(0, str.length - 1)
  91. }
  92. // 使用 JavaScript 内置的 parseFloat 函数进行转换并返回结果。
  93. return parseFloat(str)
  94. }
  95. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/一键难忘520/article/detail/887906
推荐阅读
相关标签
  

闽ICP备14008679号