在python中,将数字的最后一位替换为零并保持前三位不变的最佳方法是什么?
示例:
<?php
$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];
// Import PHPMailer classes into the global namespace
// These must be at the top of your script, not inside a function
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
//Load Composer's autoloader
require 'vendor/autoload.php';
$mail = new PHPMailer(true);
try {
//Server settings
$mail->SMTPDebug = 2;
$mail->isSMTP();
$mail->Host = 'smtp.office365.com';
$mail->Port = 587;
$mail->SMTPSecure = 'TLS';
$mail->SMTPAuth = true;
$mail->Username = 'sender@test.com'; // SMTP username
$mail->Password = 'password'; // SMTP password
//Recipients
$mail->setFrom('test@test.com', ' Services');
$mail->addAddress('recipient@test.com', $name); // Add a recipient
//Content
$mail->isHTML(true); // Set email format to HTML
$mail->Subject = 'Contact Us Message';
$mail->Body = 'Sent a message, This is the message :';
$mail->AltBody = 'This is the body in plain text for non-HTML mail clients';
$mail->send();
header('Location: tempage.php');
} catch (Exception $e) {
echo 'Message could not be sent. Mailer Error: ', $mail->ErrorInfo;
}
?>
答案 0 :(得分:4)
将其转换为字符串:
a = 23456789
a_str = str(a)
sol = a_str[0:3]+"0"*(len(a_str)-3)
print(sol)
返回:23400000
答案 1 :(得分:3)
round
接受一个否定参数,这很有用,但是它会舍入结果,而这可能与您想要的不完全相同:
a = 23456789
round(a, -4)
23460000
如果您不希望四舍五入,则可以使用一个小的辅助函数,也许像这样:
import math
def significant(num, signum):
expo = 10**(int(math.log(num, 10)) - signum + 1)
return expo * (num // expo)
significant(12345, 3)
12300
答案 2 :(得分:2)
使用round
,但您必须更加聪明才能获得所需的功能
def round_n(num, keep=3):
return round(num, keep - len(str(num)))
round_n(23456789)
Out[72]: 23500000
round_n(112022)
Out[73]: 112000
round_n(1111)
Out[74]: 1110
round_n(111)
Out[75]: 111
n.b这仅适用于整数,不适用于浮点数
如果您只想截断而不是四舍五入,请改为
def truncate_int(n, keep=3):
if n < 0: # account for '-'
keep += 1
s = str(n)
return int(s[:keep] + '0'*(len(s) - keep))
答案 3 :(得分:2)
您可以使用math.log10
,底数除法和指数来定义转换器函数:
a = 23456789
b = 112022
c = 1111
d = 111
import math
def converter(x, k=3):
dig = int(math.log10(x)) + 1
n = dig - k
return x // 10**n * 10**n
for val in [a, b, c, d]:
print(val, '->', converter(val))
23456789 -> 23400000
112022 -> 112000
1111 -> 1110
111 -> 111
答案 4 :(得分:1)
我将使用下限除法和适当的乘法器相乘来执行此操作。这样,我们避免了舍入问题。我们还必须确保乘数是整数。我们可以使用max
强制m
为非负值来做到这一点。
data = (23456789, 112022, 1111, 111, 6, 98, 987, 9876, 9876598765)
def zero_final(n, digits=3):
m = 10 ** max(0, len(str(n)) - digits)
return n // m * m
for n in data:
print(n, zero_final(n))
输出
23456789 23400000
112022 112000
1111 1110
111 111
6 6
98 98
987 987
9876 9870
9876598765 9870000000
答案 5 :(得分:0)
不确定这是最好的方法,
但是我会使用字符串操作和格式化。
number = 23456789
print int(str(number)[:3] + "%0{0}d".format(len(str(number)) - 3) % 0)
答案 6 :(得分:0)
您可以尝试使用字符串操作,如下所示:
def number_cov(num):
x = str(num)
if len(x)>3:
cov_num = int(x[0:3]+'0'*(len(x)-3))
else:
cov_num = num
return cov_num
number_cov(11111)
11100
答案 7 :(得分:0)
n - n%1000
对于正整数n
,n%1000
为您提供最后三位数字的值。因此,将其减去会得到一个以000
结尾的数字。
>>> n = 12345
>>> n - n%1000
12000
如果要对其他数字位数执行此操作,则可以这样做:
>>> n = 1234567
>>> r = 10**5 # I want to zero-out five digits
>>> n - n%r
1200000