পাইথন 3.x রাউন্ডিং আচরণ


176

আমি কেবল পাইথন 3.0.০ এ নতুন কী পড়ছি এবং এতে বলা হয়েছে:

রাউন্ড () ফাংশন রাউন্ডিং কৌশল এবং রিটার্নের ধরণের পরিবর্তন হয়েছে। সঠিক অর্ধেকটি ক্ষেত্রে এখন শূন্য থেকে দূরের পরিবর্তে নিকটতম সমান ফলাফলের দিকে গোলাকার। (উদাহরণস্বরূপ, রাউন্ড (2.5) এখন 3 এর পরিবর্তে 2 ফেরত দেয়)

এবং বৃত্তাকার জন্য ডকুমেন্টেশন :

রাউন্ড () সমর্থনকারী অন্তর্নির্মিত ধরণের জন্য, মানগুলি বিদ্যুৎ বিয়োগের 10 এর নিকটতম একাধিকের সাথে বৃত্তাকার হয়; যদি দুটি গুণগুলি সমানভাবে কাছাকাছি হয় তবে রাউন্ডিংটি সমান পছন্দের দিকে করা হয়

সুতরাং, v2.7.3 এর অধীনে :

In [85]: round(2.5)
Out[85]: 3.0

In [86]: round(3.5)
Out[86]: 4.0

যেমনটা আমি আশা করেছিলাম তবে, এখন v3.2.3 এর আওতায় :

In [32]: round(2.5)
Out[32]: 2

In [33]: round(3.5)
Out[33]: 4

এটি পাল্টা-স্বজ্ঞাত এবং বৃত্তাকার সম্পর্কে আমি যা বুঝি তার বিপরীতে মনে হয় (এবং লোকেদের ট্রিপ করতে বাধ্য)। ইংরাজী আমার মাতৃভাষা নয় তবে আমি এটি পড়ার আগে থেকেই ভেবেছিলাম যে রাউন্ডিংয়ের অর্থ কী তা আমি জানি: - / আমি নিশ্চিত যে ভি 3 চালু হওয়ার সময় অবশ্যই এই বিষয়ে কিছু আলোচনা হওয়া উচিত ছিল, তবে আমি কোনও ভাল কারণ খুঁজে পেতে পারি নি আমার অনুসন্ধান

  1. এটিকে কেন এতে পরিবর্তন করা হয়েছিল তা কি কারও অন্তর্দৃষ্টি আছে?
  2. মূলধারার প্রোগ্রামিং ভাষাগুলি (যেমন, সি, সি ++, জাভা, পার্ল, ..) রয়েছে যা এই ধরণের (আমার কাছে বেমানান) গোল করে?

আমি এখানে কি মিস করছি?

আপডেট: @ লি-অংওয়াইপের মন্তব্য পুনরায় "ব্যাংকার্স রাউন্ডিং" আমাকে অনুসন্ধানের জন্য সঠিক অনুসন্ধান শব্দ / কীওয়ার্ড দিয়েছে এবং আমি এই প্রশ্নটি পেয়েছি: নেট কেন ব্যাংকারদের গোলকে ডিফল্ট হিসাবে ব্যবহার করে? , তাই আমি মনোযোগ দিয়ে পড়তে হবে।


27
এটি দেখার মতো সময় আমার কাছে নেই, তবে আমি বিশ্বাস করি এটিকে "ব্যাঙ্কারস রাউন্ডিং" বলা হয়। আমি বিশ্বাস করি এটি অর্থ শিল্পে সাধারণ।
লি-অং ইপ

2
@ সুবেরি ভাল, হ্যাঁ, এর আচরণটি তার নিজস্ব বর্ণনার সাথে সামঞ্জস্যপূর্ণ। সুতরাং যদি এটি বলবে যে "রাউন্ডিং" এর মান দ্বিগুণ করছে এবং এটি করেছে, তবে এটিও সামঞ্জস্যপূর্ণ হবে :) .. তবে এটি সাধারণত গোল করে যা বোঝায় তার বিপরীতে মনে হয় । তাই আমি আরও ভাল বোঝার সন্ধান করছি।
লেভন

1
@ লি-অংইইপ নেতৃত্বের জন্য ধন্যবাদ "ব্যাংকারদের বৃত্তাকার" .. আমি এটি সন্ধান করব।
লেভন


3
কেবল একটি নোট: ব্যাঙ্কারদের রাউন্ডিং কেবল অর্থায়নে সাধারণ নয়। এইভাবেই 70 এর দশকে আমাকে ইতিমধ্যে প্রাথমিক বিদ্যালয়ে গোল করতে শেখানো হয়েছিল :-)
লেনার্ট রেজেব্রো

উত্তর:


160

পাইথন 3.0 এর উপায়টিকে আজকাল স্ট্যান্ডার্ড রাউন্ডিং পদ্ধতি হিসাবে বিবেচনা করা হয়, যদিও কিছু ভাষা বাস্তবায়ন এখনও বাসে নেই।

সাধারণ "সর্বদা 0.5 রেউন্ড আপ" কৌশলটি উচ্চ সংখ্যার দিকে সামান্য পক্ষপাত করে। বিপুল সংখ্যক গণনা সহ এটি উল্লেখযোগ্য হতে পারে। পাইথন 3.0 অ্যাপ্রোচ এই সমস্যাটি মুছে ফেলে।

সাধারণ ব্যবহারে গোল করার একাধিক পদ্ধতি রয়েছে। আইআইইই 754, ভাসমান-পয়েন্ট গণিতের আন্তর্জাতিক মান, পাঁচটি বিভিন্ন বৃত্তাকার পদ্ধতি নির্ধারণ করে (পাইথন 3.0 দ্বারা ব্যবহৃত একটিটি ডিফল্ট)। এবং অন্যদের আছে।

এই আচরণটি যেমন হওয়া উচিত তত ব্যাপকভাবে পরিচিত নয়। অ্যাপলস্ক্রিপ্টটি ছিল, যদি আমি সঠিকভাবে মনে করি, তবে এই বৃত্তাকার পদ্ধতির একটি প্রাথমিক গ্রহণকারী। roundAppleScript কমান্ড আসলে প্রস্তাব বেশ কয়েকটি বিকল্প আছে, কিন্তু রাউন্ড-দিকে-এমনকি দৃশ্যত প্রকৌশলী যারা বাস্তবায়িত যেমন আইইইই 754. হয় ডিফল্ট roundকমান্ড তাই সমস্ত অনুরোধ সাথে খাওয়ানো পেয়েছিলাম "এটা কাজ আমি শিখেছি করা স্কুল "যে তিনি ঠিক এটি প্রয়োগ করেছিলেন: round 2.5 rounding as taught in schoolএটি একটি বৈধ অ্যাপলস্ক্রিপ্ট কমান্ড। :-)


4
এই "ডিফল্ট স্ট্যান্ডার্ড রাউন্ডিং পদ্ধতিটি আমি আজকাল সার্বজনীনভাবে প্রায় জানি না", আপনি (বা অন্য কেউ) যদি জানতেন যে সি / সি ++ / জাভা / পারল বা অন্য কোনও "মূল-প্রবাহ" ভাষা একইভাবে প্রয়োগ করে?
লেভন

3
রুবি তা করে। মাইক্রোসফ্ট। নেট নেটওয়ার্কগুলি এটি করে। জাভা প্রদর্শিত হবে না, যদিও। আমি প্রতিটি সম্ভাব্য ভাষার জন্য এটি সন্ধান করতে পারি না তবে আমি অনুমান করি যে এটি মোটামুটি সম্প্রতি ডিজাইন করা ভাষাগুলিতে সবচেয়ে সাধারণ। আমি কল্পনা করি যে সি এবং সি ++ এত পুরানো যে তারা না।
0:44 এ টাইপ করুন

5
রুবি আয় 3জন্য2.5.round
JFS

14
আমি এটিকে অ্যাপলস্ক্রিপ্টের পরিচালনা সম্পর্কে কিছুটা যুক্ত করেছি কারণ "পুরানো" আচরণটি বাস্তবায়িত হওয়ার মতো ব্যঙ্গাত্মক পদ্ধতিটি আমি পছন্দ করি।
কান্ডাল করুন

2
@ জিনডাল 1986 সাল থেকে এই পদ্ধতিটি আইইইই ডিফল্ট রাউন্ডিং মোড (যখন আইইইই 754-1985 প্রকাশিত হয়েছিল)। এটি কমপক্ষে সি 98 (এবং এর ফলে সি ++ এও) এর পরে এটি ডিফল্ট রাউন্ডিং মোড হয়ে গেছে, তবে C99 (এবং এর আগে ছড়িয়ে ছিটিয়ে থাকা সমর্থন সহ সি ++ 11) যেহেতু একটি "রাউন্ড ()" ফাংশন উপলব্ধ রয়েছে পরিবর্তে শূন্য থেকে দূরে বন্ধন। অভ্যন্তরীণ ভাসমান পয়েন্ট রাউন্ডিং এবং ফাংশনগুলির রিন্ট () পরিবার এখনও রাউন্ডিং মোড সেটিং মান্য করে, যা ডিফল্ট অব সান্ধ্যের সাথে সম্পর্ক স্থাপন করে।
ওয়ার্লিন

41

দশমিক মডিউলটি ব্যবহার করে আপনি পাই 3000 এ পাওয়া রাউন্ডিংটি নিয়ন্ত্রণ করতে পারেন :

>>> decimal.Decimal('3.5').quantize(decimal.Decimal('1'), 
    rounding=decimal.ROUND_HALF_UP)
>>> Decimal('4')

>>> decimal.Decimal('2.5').quantize(decimal.Decimal('1'),    
    rounding=decimal.ROUND_HALF_EVEN)
>>> Decimal('2')

>>> decimal.Decimal('3.5').quantize(decimal.Decimal('1'), 
    rounding=decimal.ROUND_HALF_DOWN)
>>> Decimal('3')

ধন্যবাদ .. আমি এই মডিউলটির সাথে পরিচিত ছিলাম না। পাইথন বনাম 2.x এর আচরণটি আমি কীভাবে পাব? আপনি যে উদাহরণগুলি দেখান সেগুলি মনে হয় না। যদি সম্ভব হয় তবে কেবল কৌতূহলী।
লেভন

1
@ লাইভন: ধ্রুবকটি ROUND_HALF_UPপাইথন ২ এক্স এর পুরানো আচরণের মতো।
দাউ

2
আপনি দশমিক মডিউলটির জন্য একটি প্রসঙ্গও সেট করতে পারেন যা এটি আপনার জন্য স্পষ্টভাবে করে। setcontext()ফাংশন দেখুন ।
কিনুন

আজ আমি ঠিক এটিই খুঁজছিলাম। পাইথন ৩.৪.৩-তে প্রত্যাশা অনুযায়ী কাজ করা। লক্ষণীয় বিষয়, আপনি যদি অর্থের জন্য নিকটতম 100 এর দশকে যেতে চান তবে এটি পরিবর্তন করে quantize(decimal.Decimal('1')আপনি কতটা গোল করে তা নিয়ন্ত্রণ করতে পারেন quantize(decimal.Decimal('0.00')
ইগোর

এই সমাধানটি round(number, ndigits)যতক্ষণ ndigitsইতিবাচক হিসাবে এটি প্রতিস্থাপন হিসাবে কাজ করে , তবে বিরক্তিকরভাবে আপনি এ জাতীয় কিছু প্রতিস্থাপন করতে এটি ব্যবহার করতে পারবেন না round(5, -1)
পেক্কা ক্লার্ক

15

এখানে ডকুমেন্টেশন থেকে একটি গুরুত্বপূর্ণ নোট যোগ করতে:

https://docs.python.org/dev/library/functions.html#round

বিঃদ্রঃ

ভাসমানগুলির জন্য বৃত্তাকার () ব্যবহারটি আশ্চর্যজনক হতে পারে: উদাহরণস্বরূপ, বৃত্তাকার (2.675, 2) প্রত্যাশিত 2.68 এর পরিবর্তে 2.67 দেয়। এটি কোনও ত্রুটি নয়: এটি বেশিরভাগ দশমিক ভগ্নাংশকে ঠিক ভাসা হিসাবে উপস্থাপন করা যায় না এর ফলস্বরূপ। ভাসমান পয়েন্ট গণিত দেখুন: আরও তথ্যের জন্য সমস্যা এবং সীমাবদ্ধতা।

সুতরাং পাইথন ৩.২-এ নিম্নলিখিত ফলাফলগুলি পেয়ে অবাক হবেন না:

>>> round(0.25,1), round(0.35,1), round(0.45,1), round(0.55,1)
(0.2, 0.3, 0.5, 0.6)

>>> round(0.025,2), round(0.035,2), round(0.045,2), round(0.055,2)
(0.03, 0.04, 0.04, 0.06)

আমি দেখেছি। এবং আমার প্রথম প্রতিক্রিয়া: ১ 2.-বিট সিপিইউ কে ব্যবহার করছেন যা "2.67x" এর সমস্ত অনুমতি উপস্থাপনে অক্ষম? ভাসায় ভগ্নাংশ প্রকাশ করা যায় না তা এখানে বলির ছাগলের মতো বলে মনে হয়: কোনও আধুনিক সিপিইউ যে কোনও ভুলতে (পাইথন বাদে?) তেমন ভুল নয়
অ্যাডাম

9
@ অ্যাডাম: আমি মনে করি আপনি ভুল বোঝাবুঝি করছেন। ফ্লোট সংরক্ষণের জন্য ব্যবহৃত বাইনারি ফর্ম্যাট (আইইইই 754 বাইনারি 64) 2.675হুবহু উপস্থাপন করতে পারে না : কম্পিউটারটি পেতে পারে এটি সবচেয়ে কাছের 2.67499999999999982236431605997495353221893310546875। এটি বেশ কাছাকাছি, তবে এটি ঠিক সমান নয় 2.675: এটি তুলনায় খুব সামান্য কাছাকাছি । সুতরাং ফাংশনটি সঠিক কাজটি করে এবং এটি পয়েন্ট-এর পরে-পয়েন্টের কাছাকাছি মানের কাছে গোল করে । পাইথনের সাথে এর কোনও যোগসূত্র নেই, এবং বাইনারি ভাসমান-পয়েন্টের সাথে করার মতো সমস্ত কিছুই। 2.672.68round2.67
মার্ক ডিকিনসন

3
এটি "সঠিক জিনিস" নয় কারণ এটি একটি উত্স-কোড ধ্রুবক দেওয়া হয়েছিল :) তবে আমি আপনার বক্তব্যটি দেখতে পাচ্ছি।
আদম

@ অ্যাডাম: আমি আগে জেএসে এই একই প্রশ্নে ছুটে এসেছি তাই এটি ভাষা নির্দিষ্ট নয়।
ইগোর

5

আমারও সম্প্রতি এ নিয়ে সমস্যা হয়েছিল। অতএব, আমি একটি অজগর 3 মডিউল তৈরি করেছি যার 2 টি ফাংশন ট্রুরাউন্ড () এবং ট্রুয়ারাউন্ড_প্রিসিশন () এটি সম্বোধন করে এবং একই গোলাকার আচরণ দেয় প্রাথমিক বিদ্যালয় (ব্যাংকারের বৃত্তাকার নয়) থেকে ব্যবহৃত হত। মডিউলটি এখানে। কেবল কোডটি সংরক্ষণ করুন এবং এটি অনুলিপি করুন বা এটি আমদানি করুন। দ্রষ্টব্য: ট্রুআরাউন্ড_প্রিভিশন মডিউলটি ROUND_CEILING, ROUND_DOWN, ROUND_FLOOR, ROUND_HALF_DOWN, ROUND_HALF_EVEN, ROUND_HALF_UP, ROUND_UP, এবং ROUND_05UP মডিউলটিতে আরও ফ্ল্যাশ দেখুন (মডিউলটিতে আরও ফ্ল্যাগ দেখুন) অনুযায়ী প্রয়োজন অনুসারে গোলের আচরণটি পরিবর্তন করতে পারে। নীচের ফাংশনগুলির জন্য, ডকাস্ট্রিংগুলি দেখুন বা আরও ডকুমেন্টেশনের জন্য দোভাষীর অনুলিপি করা হলে সহায়তা (ট্রুআরাউন্ড) এবং সহায়তা (ট্রুরাউন্ড_প্রিসিশন) ব্যবহার করুন।

#! /usr/bin/env python3
# -*- coding: utf-8 -*-

def trueround(number, places=0):
    '''
    trueround(number, places)

    example:

        >>> trueround(2.55, 1) == 2.6
        True

    uses standard functions with no import to give "normal" behavior to 
    rounding so that trueround(2.5) == 3, trueround(3.5) == 4, 
    trueround(4.5) == 5, etc. Use with caution, however. This still has 
    the same problem with floating point math. The return object will 
    be type int if places=0 or a float if places=>1.

    number is the floating point number needed rounding

    places is the number of decimal places to round to with '0' as the
        default which will actually return our interger. Otherwise, a
        floating point will be returned to the given decimal place.

    Note:   Use trueround_precision() if true precision with
            floats is needed

    GPL 2.0
    copywrite by Narnie Harshoe <signupnarnie@gmail.com>
    '''
    place = 10**(places)
    rounded = (int(number*place + 0.5if number>=0 else -0.5))/place
    if rounded == int(rounded):
        rounded = int(rounded)
    return rounded

def trueround_precision(number, places=0, rounding=None):
    '''
    trueround_precision(number, places, rounding=ROUND_HALF_UP)

    Uses true precision for floating numbers using the 'decimal' module in
    python and assumes the module has already been imported before calling
    this function. The return object is of type Decimal.

    All rounding options are available from the decimal module including 
    ROUND_CEILING, ROUND_DOWN, ROUND_FLOOR, ROUND_HALF_DOWN, ROUND_HALF_EVEN, 
    ROUND_HALF_UP, ROUND_UP, and ROUND_05UP.

    examples:

        >>> trueround(2.5, 0) == Decimal('3')
        True
        >>> trueround(2.5, 0, ROUND_DOWN) == Decimal('2')
        True

    number is a floating point number or a string type containing a number on 
        on which to be acted.

    places is the number of decimal places to round to with '0' as the default.

    Note:   if type float is passed as the first argument to the function, it
            will first be converted to a str type for correct rounding.

    GPL 2.0
    copywrite by Narnie Harshoe <signupnarnie@gmail.com>
    '''
    from decimal import Decimal as dec
    from decimal import ROUND_HALF_UP
    from decimal import ROUND_CEILING
    from decimal import ROUND_DOWN
    from decimal import ROUND_FLOOR
    from decimal import ROUND_HALF_DOWN
    from decimal import ROUND_HALF_EVEN
    from decimal import ROUND_UP
    from decimal import ROUND_05UP

    if type(number) == type(float()):
        number = str(number)
    if rounding == None:
        rounding = ROUND_HALF_UP
    place = '1.'
    for i in range(places):
        place = ''.join([place, '0'])
    return dec(number).quantize(dec(place), rounding=rounding)

আশাকরি এটা সাহায্য করবে,

Narnie


5

পাইথন 3.x রাউন্ড .5 এর প্রতিবেশীর মানগুলি যা সমান

assert round(0.5) == 0
assert round(1.5) == 2
assert round(2.5) == 2

import decimal

assert decimal.Decimal('0.5').to_integral_value() == 0
assert decimal.Decimal('1.5').to_integral_value() == 2
assert decimal.Decimal('2.5').to_integral_value() == 2

তবে, দশমিক রাউন্ডিং "ব্যাক" সর্বদা রাউন্ডে পরিবর্তন করতে পারে needed আপকে, প্রয়োজন হলে:

decimal.getcontext().rounding = decimal.ROUND_HALF_UP

assert decimal.Decimal('0.5').to_integral_value() == 1
assert decimal.Decimal('1.5').to_integral_value() == 2
assert decimal.Decimal('2.5').to_integral_value() == 3

i = int(decimal.Decimal('2.5').to_integral_value()) # to get an int
assert i == 3
assert type(i) is int

1

পাইথন 2 এ পাইথন 2 গোলাকার আচরণ।

15 তম দশমিক স্থানে 1 যুক্ত করা হচ্ছে। 15 অঙ্কের যথার্থতা।

round2=lambda x,y=None: round(x+1e-15,y)

3
আপনি কি এই সূত্রের পিছনে অন্তর্দৃষ্টি ব্যাখ্যা করতে পারেন?
হাদি

2
আমি যা বুঝি সেগুলি থেকে, ভগ্নাংশগুলি যা সঠিকভাবে উপস্থাপন করা যায় না তার 15 9 এর দশক হবে, তারপরে এই অসম্পূর্ণতা। উদাহরণস্বরূপ, 2.675হয় 2.67499999999999982236431605997495353221893310546875। 1e-15 যুক্ত করা এটি 2.675 এর উপরে টিপ দেবে এবং এটি সঠিকভাবে গোল করবে। যদি ভগ্নাংশটি ইতিমধ্যে কোডের অবিচ্ছিন্ন হয়ে থাকে, 1e-15 যোগ করলে গোলাকার কিছুই পরিবর্তন হবে না।
বেনোইট ডুফ্রেসনে

1

কিছু কারন:

in: Decimal(75.29 / 2).quantize(Decimal('0.01'), rounding=ROUND_HALF_UP)
in: round(75.29 / 2, 2)
out: 37.65 GOOD

in: Decimal(85.55 / 2).quantize(Decimal('0.01'), rounding=ROUND_HALF_UP)
in: round(85.55 / 2, 2)
out: 42.77 BAD

ঠিক করার জন্য:

in: round(75.29 / 2 + 0.00001, 2)
out: 37.65 GOOD
in: round(85.55 / 2 + 0.00001, 2)
out: 42.78 GOOD

আপনি যদি আরও দশমিক চান, উদাহরণস্বরূপ 4, আপনার (+ 0.0000001) যোগ করা উচিত।

আমার জন্য কাজ।


পোস্টের জন্য ধন্যবাদ, এটি আমার জন্য একমাত্র সমাধান যা কাজ করেছিল। প্রত্যেকে 0.5 মিটার আপ / ডাউনের দিকে যেতে আগ্রহী বলে মনে হচ্ছে, তাই আমি বহু দশমিক রাউন্ডিং সমস্যাগুলি পরিচালনা করতে পারিনি।
গায়াথ্রি

-1

নমুনা প্রজনন:

['{} => {}'.format(x+0.5, round(x+0.5)) for x in range(10)]

['0.5 => 0', '1.5 => 2', '2.5 => 2', '3.5 => 4', '4.5 => 4', '5.5 => 6', '6.5 => 6', '7.5 => 8', '8.5 => 8', '9.5 => 10']

এপিআই: https://docs.python.org/3/library/function.html#round

যুক্তরাষ্ট্র:

দশমিক বিন্দুর পরে এনডিগটস নির্ভুলতায় গোলাকার রিটার্ন নম্বর। যদি এনডিজিটগুলি বাদ দেওয়া হয় বা কোনওটি না হয় তবে এটি তার ইনপুটটিতে নিকটতম পূর্ণসংখ্যাকে প্রদান করে।

রাউন্ড () সমর্থনকারী অন্তর্নির্মিত ধরণের জন্য, মানগুলি পাওয়ার মাইনাস এনডিজিটগুলিতে 10 এর নিকটতম একাধিকের সাথে গোল হয়; যদি দুটি গুণগুলি সমানভাবে কাছাকাছি থাকে তবে সমান পছন্দ (যেমন, উদাহরণস্বরূপ, উভয় রাউন্ড (0.5) এবং রাউন্ড (-0.5) উভয় 0 হয়, এবং বৃত্তাকার (1.5) 2 হয়। যেকোন পূর্ণসংখ্যার মান nd Digits (ধনাত্মক, শূন্য বা নেতিবাচক) এর জন্য বৈধ। যদি এনডিজিটগুলি বাদ দেওয়া হয় বা কিছুই না হয় তবে ফেরতের মানটি পূর্ণসংখ্যা হয়। অন্যথায় রিটার্ন মান সংখ্যার মতোই থাকে।

সাধারণ পাইথন অবজেক্ট সংখ্যার জন্য, সংখ্যায় বৃত্তাকার প্রতিনিধি। বৃত্তাকার

দ্রষ্টব্য () এর জন্য বৃত্তাকার () এর আচরণ অবাক করে দিতে পারে: উদাহরণস্বরূপ, বৃত্তাকার (2.675, 2) প্রত্যাশিত 2.68 এর পরিবর্তে 2.67 দেয়। এটি কোনও ত্রুটি নয়: এটি বেশিরভাগ দশমিক ভগ্নাংশকে ঠিক ভাসা হিসাবে উপস্থাপন করা যায় না এর ফলস্বরূপ। ভাসমান পয়েন্ট গণিত দেখুন: আরও তথ্যের জন্য সমস্যা এবং সীমাবদ্ধতা।

এই অন্তর্দৃষ্টি দেওয়া হয়েছে আপনি এটি সমাধান করতে কিছু গণিত ব্যবহার করতে পারেন

import math
def my_round(i):
  f = math.floor(i)
  return f if i - f < 0.5 else f+1

এখন আপনি গোলের পরিবর্তে আমার_আউন্ডের সাথে একই পরীক্ষা চালাতে পারবেন।

['{} => {}'.format(x + 0.5, my_round(x+0.5)) for x in range(10)]
['0.5 => 1', '1.5 => 2', '2.5 => 3', '3.5 => 4', '4.5 => 5', '5.5 => 6', '6.5 => 7', '7.5 => 8', '8.5 => 9', '9.5 => 10']

-2

স্কুলে পড়ানো হিসাবে পাইথন ৩.x এ গোল করার সবচেয়ে সহজ উপায় হ'ল সহায়ক ভেরিয়েবল ব্যবহার করা:

n = 0.1 
round(2.5 + n)

এবং এটি 2.0 থেকে 3.0 (0.1 টি পদক্ষেপে) এর সিরিজের ফলাফল হবে:

>>> round(2 + n)
>>> 2

>>> round(2.1 + n)
>>> 2

>>> round(2.2 + n)
>>> 2

>>> round(2.3 + n)
>>> 2

>>> round(2.4 + n)
>>> 2

>>> round(2.5 + n)
>>> 3

>>> round(2.6 + n)
>>> 3

>>> round(2.7 + n)
>>> 3

>>> round(2.8 + n)
>>> 3

>>> round(2.9 + n)
>>> 3

>>> round(3 + n)
>>> 3

-2

আপনি ম্যাথ.সিল মডিউলটি ব্যবহার করে আপনার রাউন্ডিংটি নিয়ন্ত্রণ করতে পারেন:

import math
print(math.ceil(2.5))
> 3

এটি সর্বদা দশমিক অংশ ছাড়াই নম্বরটি ফিরিয়ে দেবে, এটি গোলাকার নয়। সিল (2.5) = 2,
সিল

1
পাইথন 3 + এ, যদি সংখ্যাটি আর্গুমেন্টটি ধনাত্মক বা negativeণাত্মক সংখ্যা হয় তবে সিল ফাংশনটি সিলিংয়ের মান দেয়।
Eds_k

[14] এ: math.ceil (2.99) আউট [14]: 3
Eds_k

হ্যাঁ, আমি দুঃখিত আমি ভুল ছিল। সিল () সিলিংয়ের মানটি দেয় যেখানে মেঝে () আমি যে বিষয়ে কথা বলছিলাম তা প্রদান করে। তবে তবুও, আমার মতে এটি পুরোপুরি বৃত্তাকারী আচরণ নয় (এই দুটি ফাংশন)
ক্র্যাফটার

-4

এই কোড ব্যবহার করে দেখুন:

def roundup(input):   
   demo = input  if str(input)[-1] != "5" else str(input).replace("5","6")
   place = len(demo.split(".")[1])-1
   return(round(float(demo),place))

ফলাফলটি হবে:

>>> x = roundup(2.5)
>>> x
3.0  
>>> x = roundup(2.05)
>>> x
2.1 
>>> x = roundup(2.005)
>>> x
2.01 

আউটপুট আপনি এখানে চেক করতে পারেন: https://i.stack.imgur.com/QQUkS.png

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.