将数字的最后n个数字转换为零

时间:2018-08-20 10:39:40

标签: python

在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;
    }
?> 

8 个答案:

答案 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

对于正整数nn%1000为您提供最后三位数字的值。因此,将其减去会得到一个以000结尾的数字。

>>> n = 12345
>>> n - n%1000
12000

如果要对其他数字位数执行此操作,则可以这样做:

>>> n = 1234567
>>> r = 10**5 # I want to zero-out five digits
>>> n - n%r
1200000