如何更改号码的最后一位


How to change number last digit

将价格改为:29、39、49、59、69、79、89或99。
例如:如果价格是2018 = 2029
或者如果价格是1051,那么标记为:1059

看起来很简单。将数字分成两部分(下面的伪代码):

remainder = number % 100           # gives 0 thru 99 inclusive
hundreds = number - remainder      # give x00, where x is any sequence of digits.

然后像这样调整剩余部分:

if      remainder <= 29:  remainder = 29
else if remainder <= 39:  remainder = 39
else if remainder <= 49:  remainder = 49
else if remainder <= 59:  remainder = 59
else if remainder <= 69:  remainder = 69
else if remainder <= 79:  remainder = 79
else if remainder <= 89:  remainder = 89
else:                     remainder = 99

然后重新组合:

number = hundreds + remainder

如果您愿意,您可以将中间位简化为表达式,但是,根据业务逻辑,如果边界变为.29, .37, .53(或任何不能立即适用于公式的内容),则最好保持原样。


作为示例,这里有一些Python代码(最终的伪代码语言)可以满足您的要求:

def adjust (n):
    r = n % 100
    n = n - r
    if   r <= 29:  r = 29
    elif r <= 39:  r = 39
    elif r <= 49:  r = 49
    elif r <= 59:  r = 59
    elif r <= 69:  r = 69
    elif r <= 79:  r = 79
    elif r <= 89:  r = 89
    else:          r = 99
    return n + r

print "%4d -> %4d'n" % (1562, adjust(1562))
for i in range (89,190):
    print "%3d -> %3d" % (i, adjust(i))

输出如预期:

1562 -> 1569
 89 ->  89
 90 ->  99
 91 ->  99
 92 ->  99
 93 ->  99
 94 ->  99
 95 ->  99
 96 ->  99
 97 ->  99
 98 ->  99
 99 ->  99
100 -> 129
101 -> 129
102 -> 129
103 -> 129
104 -> 129
105 -> 129
106 -> 129
107 -> 129
108 -> 129
109 -> 129
110 -> 129
111 -> 129
112 -> 129
113 -> 129
114 -> 129
115 -> 129
116 -> 129
117 -> 129
118 -> 129
119 -> 129
120 -> 129
121 -> 129
122 -> 129
123 -> 129
124 -> 129
125 -> 129
126 -> 129
127 -> 129
128 -> 129
129 -> 129
130 -> 139
131 -> 139
132 -> 139
133 -> 139
134 -> 139
135 -> 139
136 -> 139
137 -> 139
138 -> 139
139 -> 139
140 -> 149
141 -> 149
142 -> 149
143 -> 149
144 -> 149
145 -> 149
146 -> 149
147 -> 149
148 -> 149
149 -> 149
150 -> 159
151 -> 159
152 -> 159
153 -> 159
154 -> 159
155 -> 159
156 -> 159
157 -> 159
158 -> 159
159 -> 159
160 -> 169
161 -> 169
162 -> 169
163 -> 169
164 -> 169
165 -> 169
166 -> 169
167 -> 169
168 -> 169
169 -> 169
170 -> 179
171 -> 179
172 -> 179
173 -> 179
174 -> 179
175 -> 179
176 -> 179
177 -> 179
178 -> 179
179 -> 179
180 -> 189
181 -> 189
182 -> 189
183 -> 189
184 -> 189
185 -> 189
186 -> 189
187 -> 189
188 -> 189
189 -> 189

在浮点数的情况下,它将不起作用。

首先需要检查value是整数(十进制)还是浮点数。在此之后,您需要相应地处理逻辑。

创建如下函数:

function addVal($price){
    $price = 10.50;
    if(is_float($price)){
        $whole = floor($price);      // 1
        $fraction = $n - $whole;
        $final = getVal($whole,$fraction);
    }else{
        $final = getVal($price);
    }
    return $final;
}
function getVal($price,$fraction=0){
    // your logic goes here
    if($fraction!=0){
        // add fractional part to price after applying logic
    }
    return $price;
}

需要使用上面所示的substr函数比较最后两个值。然后检查最接近的可能值的条件。好了。做。

if (substr($price, -2) <= 29) {
    $price = substr($price, 0, -2) . 29;
} 
else if  (substr($price, -2) <=39) {
    $price = substr($price, 0, -2) . 39; 
}

等等....

干杯…

试试这个:

if (substr($price, -2) >= 20) {
    $price = substr($price, 0, -1) . 9;
} 
else {
    $price = substr($price, 0, -2) . 29; 
}

参见demo更新了多个示例


在评论中更新@HankyPanky的建议。为了更简单,使用三元操作符:

$price = substr($price,-2) >= 20 ? substr($price,0,-1) . 9 : substr($price,0,-2) . 29;

您可以通过使用php的round函数来创建php函数

一切正常。我已经在本地服务器上测试过了。

<?php
 $variable=1255;
 $len=strlen ( $variable );
 $last_2nd=substr($variable,$len-2,1);
 if ($last_2nd==1)
 $last_2nd=2;
 $last=substr($variable,$len-1,1);
 $last=$last+(9-$last);
 $variable=substr($variable,0,$len-2).$last_2nd.$last;
 echo $variable;
?>