3
默認情況下,R在round()
函數上使用round half to even。 但它不似乎四捨五入時定義的小數位數是始終爲真:四捨五入至十進制即使
# R code
round(1.225,2)
#[1] 1.23
round(1.2225,3)
#[1] 1.222
round(1.22225,4)
#[1] 1.2223
round(1.222225,5)
#[1] 1.22222
相較於蟒蛇,使用十進制模塊:
# Python code
import decimal
a = decimal.Decimal("1.225")
b = decimal.Decimal("1.2225")
c = decimal.Decimal("1.22225")
d = decimal.Decimal("1.222225")
a.quantize(decimal.Decimal('1.00'), decimal.ROUND_HALF_EVEN)
#Decimal('1.22')
b.quantize(decimal.Decimal('1.000'), decimal.ROUND_HALF_EVEN)
#Decimal('1.222')
c.quantize(decimal.Decimal('1.0000'), decimal.ROUND_HALF_EVEN)
#Decimal('1.2222')
d.quantize(decimal.Decimal('1.00000'), decimal.ROUND_HALF_EVEN)
#Decimal('1.22222')
蟒蛇小數庫文件,約quantize函數:
返回等於舍入後的第一個操作數並具有第二個操作數的指數的值。
我不確定我是否正確,但看起來像Python的結果是正確的。
問:
哪一個是正確的,以及如何實現用兩種語言正確的結果?
爲了解決這個「R」中的「效應」問題,請嘗試使用Rmpfr(或者只是認識到它是浮點數的任何二進制表示形式都會發生什麼,並且與它一起生活): –
嗨,Carl,我正在嘗試使用'Rmpfr',但無法計算如何達到預期的結果。查看我的問題的更新。 – art
@art既然你已經接受了這個答案,而卡爾只是一個評論者而不是回答者,你應該問一個新問題,而不是修改你的問題,以便你接受的答案不再適合。 – Gregor