number.tin 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. #nop vim: set filetype=tt:;
  2. /*
  3. 本文件属于 PaoTin++ 的一部分。
  4. PaoTin++ © 2020~2023 的所有版权均由担子炮(dzp <danzipao@gmail.com>) 享有并保留一切法律权利
  5. 你可以在遵照 GPLv3 协议的基础之上使用、修改及重新分发本程序。
  6. */
  7. #func {eval} {#math result {%0}};
  8. #func {random} {
  9. #local min {%1};
  10. #local max {%2};
  11. #local range {@eval{$max - $min + 1}};
  12. #math result { ( 1 d $range ) + $min - 1 };
  13. };
  14. #func {int} {#return @floor{@eval{%0 + 0.5}}};
  15. #func {floor} {#format result {%d} {%0}};
  16. #func {ceil} {#return @eval{@floor{%0} + 1}};
  17. #func {power} {#return @eval{%1 ** %2}};
  18. #func {root} {#return @eval{%1 // %2}};
  19. #func {abs} {#if {%0 >= 0} {#return %0} {#math result {- %0}}};
  20. #func {sign} {#if {%0 >= 0} {#return 1} {#return -1}};
  21. #func {max} {
  22. #var result {%1};
  23. #local elem {};
  24. #foreach {%0} {elem} {
  25. #if { "$elem" == "" } {
  26. #continue;
  27. };
  28. #if { $elem > $result } {
  29. #var result {$elem};
  30. };
  31. };
  32. };
  33. #func {min} {
  34. #var result {%1};
  35. #local elem {};
  36. #foreach {%0} {elem} {
  37. #if { "$elem" == "" } {
  38. #continue;
  39. };
  40. #if { $elem < $result } {
  41. #var result {$elem};
  42. };
  43. };
  44. };
  45. #func {sum} {
  46. #local sum {0};
  47. #local tmp {};
  48. #foreach {%0} {tmp} {
  49. #math sum {$sum + $tmp};
  50. };
  51. #return {$sum};
  52. };
  53. #func {avg} {
  54. #var sum {0};
  55. #local tmp {};
  56. #local count {0};
  57. #foreach {%0} {tmp} {
  58. #math sum {$sum + $tmp};
  59. #math count {$count + 1};
  60. };
  61. #if { $count == 0 } {
  62. #return 0;
  63. };
  64. #else {
  65. #return @eval{$sum / $count};
  66. };
  67. };
  68. #func {c2d} {
  69. #local string {%0};
  70. #local number1 {0}; #nop 个位(覆盖);
  71. #local number2 {0}; #nop 十百千位(加法);
  72. #local number3 {0}; #nop 万位(乘法);
  73. #local number4 {0}; #nop 亿位(乘法);
  74. #local ch {};
  75. #parse {$string} {ch} {
  76. #if { "$ch" == "{1|2|3|4|5|6|7|8|9|0|\.}" } {
  77. #format number1 {%d} {$number1$ch};
  78. #continue;
  79. };
  80. #switch {"$ch"} {
  81. #case {"零"} { #local number1 {0} };
  82. #case {"一"} { #local number1 {1} };
  83. #case {"二"} { #local number1 {2} };
  84. #case {"三"} { #local number1 {3} };
  85. #case {"四"} { #local number1 {4} };
  86. #case {"五"} { #local number1 {5} };
  87. #case {"六"} { #local number1 {6} };
  88. #case {"七"} { #local number1 {7} };
  89. #case {"八"} { #local number1 {8} };
  90. #case {"九"} { #local number1 {9} };
  91. #case {"十"} {
  92. #if { $number1 == 0 } {
  93. #format number1 {1};
  94. };
  95. #math number2 {$number2 + $number1 * 10};
  96. #format number1 {0};
  97. };
  98. #case {"百"} {
  99. #math number2 {$number2 + $number1 * 100};
  100. #format number1 {0};
  101. };
  102. #case {"千"} {
  103. #math number2 {$number2 + $number1 * 1000};
  104. #format number1 {0};
  105. };
  106. #case {"万"} {
  107. #math number3 {($number2 + $number1) * 10000};
  108. #format number1 {0};
  109. #format number2 {0};
  110. };
  111. #case {"亿"} {
  112. #math number4 {($number3 + $number2 + $number1) * 100000000};
  113. #format number1 {0};
  114. #format number2 {0};
  115. #format number3 {0};
  116. };
  117. };
  118. };
  119. #local number {};
  120. #math number {$number1 + $number2 + $number3 + $number4};
  121. #return $number;
  122. };
  123. #func {grade} {
  124. #local current {@defaultNum{%1;0}};
  125. #local default {%2};
  126. #local args {};
  127. #local grade {};
  128. #list args create {%0};
  129. #list args delete {1} {2};
  130. #list grade create {};
  131. #local count {0};
  132. #while { $count < &args[] } {
  133. #local threshold {$args[@eval{$count + 1}]};
  134. #local value {$args[@eval{$count + 2}]};
  135. #list grade {add} {{
  136. {threshold}{$threshold}
  137. {value}{$value}
  138. }};
  139. #math count {$count + 2};
  140. };
  141. #list grade {indexate} {threshold};
  142. #list grade {order};
  143. #local elem {};
  144. #local value {$default};
  145. #foreach {$grade[%*]} {elem} {
  146. #if { $current >= $elem[threshold] } {
  147. #local value {$elem[value]};
  148. };
  149. #else {
  150. #break;
  151. };
  152. };
  153. #return {$value};
  154. };