Python string.format()百分比到一个小数位

时间:2013-07-12 08:30:01

标签: python floating-point string.format

在下面的示例中,我想格式化为1位小数,但是python似乎想要将数字四舍五入,有没有办法让它不能数字化?

>>> '{:.1%}'.format(0.9995)
'100.0%'
>>> '{:.2%}'.format(0.9995)
'99.95%'

谢谢! :)

5 个答案:

答案 0 :(得分:14)

如果要向下舍入始终(而不是舍入到最接近的精度),请使用math.floor() function明确地执行此操作:

from math import floor

def floored_percentage(val, digits):
    val *= 10 ** (digits + 2)
    return '{1:.{0}f}%'.format(digits, floor(val) / 10 ** digits)

print floored_percentage(0.995, 1)

演示:

>>> from math import floor
>>> def floored_percentage(val, digits):
...     val *= 10 ** (digits + 2)
...     return '{1:.{0}f}%'.format(digits, floor(val) / 10 ** digits)
... 
>>> floored_percentage(0.995, 1)
'99.5%'
>>> floored_percentage(0.995, 2)
'99.50%'
>>> floored_percentage(0.99987, 2)
'99.98%'

答案 1 :(得分:1)

这样的事情:

def my_format(num, x):
     return str(num*100)[:4 + (x-1)] + '%'

>>> my_format(.9995, 1)
'99.9%'
>>> my_format(.9995, 2)
'99.95%'
>>> my_format(.9999, 1)
'99.9%'
>>> my_format(0.99987, 2)
'99.98%'

答案 2 :(得分:0)

有两种方法,也许最简单的方法是

x = str(10. * 0.9995).split('.')
my_string = '%s.%s%%' % (x[0], x[1][:2])

这将确保您始终将小数点放在正确的位置(对于1.00000.001等边缘情况

答案 3 :(得分:0)

在Python 3.6+中,您可以使用格式化的字符串文字,也称为f字符串。它们比str.format更有效。此外,您可以使用更有效的楼层划分代替math.floor。我认为语法也更具可读性。

下面提供了两种方法进行比较。

from math import floor
from random import random

def floored_percentage(val, digits):
    val *= 10 ** (digits + 2)
    return '{1:.{0}f}%'.format(digits, floor(val) / 10 ** digits)

def floored_percentage_jpp(val, digits):
    val *= 10 ** (digits + 2)
    return f'{val // digits / 10 ** digits:.{digits}f}%'

values = [random() for _ in range(10000)]

%timeit [floored_percentage(x, 1) for x in values]      # 35.7 ms per loop
%timeit [floored_percentage_jpp(x, 1) for x in values]  # 28.1 ms per loop

答案 4 :(得分:0)

在使用更现代的python 3.6+ f字符串格式时扩展可接受的答案

<section class="wrapper check-us-out">
                <div class="text-container">
                    <h1 class="heading">
                        <u>
                            POZNAJ NAS
                        </u>
                    </h1>
                    <p>
                        IMET to hurtownia narzędziowo-instalacyjna, dzięki
                        której błyskawicznie znajdziesz to, czego
                        potrzebujesz
                    </p>
                </div>
                <div class="wrapper items">
                    <div class="column" id="first-column">
                        <a href="{{ route('b2b') }}" class="item" aria-label="Platforma B2B">
                            <div class="icon">
                                <object
                                    data="{{ asset('imgs/svg/b2b.svg') }}"
                                    type="image/svg+xml"
                                >
                                    <img
                                        src="{{ asset('imgs/svg/b2b.svg') }}"
                                        alt="Platforma B2B"
                                    />
                                </object>
                            </div>
                            <div class="text-container">
                                <h3>PLATFOMRA B2B</h3>
                                <p>
                                    Możliwość dokonywania zakupów za pomocą
                                    nowoczesnej platformy IMET B2B
                                </p>
                            </div>
                        </a>
                    </div>
                    <div class="column">
                        <a href="{{ route('availability') }}" class="item" aria-label="Dostępność">
                            <div class="icon">
                                <object
                                    data="{{ asset('imgs/svg/availability.svg') }}"
                                    type="image/svg+xml"
                                >
                                    <img
                                        src="{{ asset('imgs/svg/availability.svg') }}"
                                        alt="Dostępność"
                                    />
                                </object>
                            </div>
                            <div class="text-container">
                                <h3>DOSTĘPNOŚĆ</h3>
                                <p>
                                    Wysoka dostępność towarów oraz własne
                                    centrum logistyczne
                                </p>
                            </div>
                        </a>
                        <a href="{{ route('advicing') }}" class="item" aria-label="Doradztwo">
                            <div class="icon">
                                <object
                                    data="{{ asset('imgs/svg/advicing.svg') }}"
                                    type="image/svg+xml"
                                >
                                    <img
                                        src="{{ asset('imgs/svg/advicing.svg') }}"
                                        alt="Doradztwo"
                                    />
                                </object>
                            </div>
                            <div class="text-container">
                                <h3>DORADZTWO</h3>
                                <p>
                                    Profesjonalna pomoc i wsparcie
                                    merytoryczne na każdym etapie
                                    współpracy
                                </p>
                            </div>
                        </a>
                    </div>
                    <div class="column">
                        <a href="{{ route('distributor') }}" class="item" aria-label="Dystrybutor">
                            <div class="icon">
                                <object
                                    data="{{ asset('imgs/svg/distributor.svg') }}"
                                    type="image/svg+xml"
                                >
                                    <img
                                        src="{{ asset('imgs/svg/distributor.svg') }}"
                                        alt="Dystrybutor"
                                    />
                                </object>
                            </div>
                            <div class="text-container">
                                <h3>DYSTRYBUTOR</h3>
                                <p>
                                    Autoryzowany punkt handlowy ponad 100
                                    marek
                                </p>
                            </div>
                        </a>
                        <a href="{{ route('special-orders') }}" class="item" aria-label="Zamówienia specjalne">
                            <div class="icon">
                                <object
                                    data="{{ asset('imgs/svg/orders.svg') }}"
                                    type="image/svg+xml"
                                >
                                    <img
                                        src="{{ asset('imgs/svg/orders.svg') }}"
                                        alt="Zamówienia specjalne"
                                    />
                                </object>
                            </div>
                            <div class="text-container">
                                <h3>ZAMÓWIENIA SPECJALNE</h3>
                                <p>
                                    Realizacja nietypowych zleceń,
                                    wymagających oryginalnych rozwiązań
                                </p>
                            </div>
                        </a>
                    </div>
                    <div class="column">
                        <a href="{{ route('assortment') }}" class="item" aria-label="Asortyment">
                            <div class="icon">
                                <object
                                    data="{{ asset('imgs/svg/assortment.svg') }}"
                                    type="image/svg+xml"
                                >
                                    <img
                                        src="{{ asset('imgs/svg/assortment.svg') }}"
                                        alt="Asortyment"
                                    />
                                </object>
                            </div>
                            <div class="text-container">
                                <h3>ASORTYMENT</h3>
                                <p>
                                    Szeroki asortyment, sięgający ponad 30
                                    tys. produktów
                                </p>
                            </div>
                        </a>
                        <a href="{{ route('delivery') }}" class="item" aria-label="Dostawa">
                            <div class="icon">
                                <object
                                    data="{{ asset('imgs/svg/delivery.svg') }}"
                                    type="image/svg+xml"
                                >
                                    <img
                                        src="{{ asset('imgs/svg/delivery.svg') }}"
                                        alt="Dostawa"
                                    />
                                </object>
                            </div>
                            <div class="text-container">
                                <h3>DOSTAWA</h3>
                                <p>
                                    Błyskawiczna dostawa zawsze na czas
                                </p>
                            </div>
                        </a>
                    </div>
                </div>
            </section>

没有任何数字(就像我需要的那样),它甚至更简单:

def floored_percentage(val, digits):
    val *= 10 ** (digits + 2)
    return f'{floor(val) / 10 ** digits}%)'