亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

舍入小數 - 如果為 1 則沒有小數,如果為 0.01 則為 2 小數

舍入小數 - 如果為 1 則沒有小數,如果為 0.01 則為 2 小數

蕭十郎 2023-03-30 17:16:56
我怎么能不截斷像 1、2、3 這樣的隨意數字,而是直接用十進制語法截斷?例如:我有 4 和小數為 1,所以截斷為 4。我有 1.5 和小數為 1,所以截斷為 1。我有 1.5689 和小數 0.01,所以截斷為 1.56。我有 1.7954 和小數 0.001,所以截斷為 1.795。我不知道這樣的功能是否存在,但我想是這樣的: round(1.5689, 0.01)->1.56我什至不知道我們怎么稱呼那個哈哈...
查看完整描述

4 回答

?
森林海

TA貢獻2011條經驗 獲得超2個贊

解決上述問題的一種可能方法是找出小數點分隔符后有多少位小數.。然后,如果您知道這些小數的位數,就可以輕松地四舍五入您的輸入數字。下面是一個例子:


def truncate(number, decimal):

    decPart = str(decimal).split('.')

    p = len(decPart[1]) if len(decPart) > 1 else 1

    return round(number, p) if p > 1 else int(number)


print(truncate(4,1))

print(truncate(1.5,1))

print(truncate(1.5689,0.01))

print(truncate(1.7954,0.001))

輸出:


4

1

1.57

1.795

我注意到你的圓形功能使數字下降。如果是這種情況,您可以簡單地將您的數字解析為字符串,將其四舍五入為您想要的小數位數,然后將其轉換回數字。


查看完整回答
反對 回復 2023-03-30
?
泛舟湖上清波郎朗

TA貢獻1818條經驗 獲得超3個贊

這是該decimal模塊的一個很好的應用程序,尤其是decimal.Decimal.quantize


import decimal


pairs = [

? ? ('4', '1'),

? ? ('1.5', '1'),

? ? ('1.5689', '0.01'),

? ? ('1.7954', '0.001')

? ? ]


for n, d in pairs:

? ? n, d = map(decimal.Decimal, (n, d))? # Convert strings to decimal number type

? ? result = n.quantize(d, decimal.ROUND_DOWN)? # Adjust length of mantissa

? ? print(result)

輸出:


4

1

1.56

1.795


查看完整回答
反對 回復 2023-03-30
?
侃侃無極

TA貢獻2051條經驗 獲得超10個贊

也可以這樣做,使用this和this:

import numpy as np

result = np.round(number, max(str(formattocopy)[::-1].find('.'),0))

結果,對于number和formattocopy值:


number=1.234

formattocopy=1.2

結果:1.2


number=1.234

formattocopy=1.234

結果:1.234


查看完整回答
反對 回復 2023-03-30
?
慕的地8271018

TA貢獻1796條經驗 獲得超4個贊

讓我們用數學代替編程!


我們知道round(x, n) 四舍五入x到n小數位。你想要的是傳遞10**n給你的新函數而不是n. 所以,


def round_new(x, n):

    return round(x, int(-math.log10(n))

這應該給你你想要的,而不需要任何字符串搜索/拆分操作。


查看完整回答
反對 回復 2023-03-30
  • 4 回答
  • 0 關注
  • 190 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號