Excel求教用VBA解決浮點誤差

2022-05-25 18:15:17 字數 1540 閱讀 2046

1樓:草原上之狼

原因:這是由於浮點運算造成的。(在微軟官方有詳細說明的)

(0.65)10 = (0.101001100110011001100110011001100110011......

)2(0.6) 10 = (0.10011001100110011001100110011001100110011......

)2目前計算機上儲存浮點數值是按照ieee(電氣和電子工程師協會)754浮點儲存格式標準來儲存的。ieee單精度浮點格式共32位,包含三個構成欄位:23位小數f,8位偏置指數e,1位符號s。

將這些欄位連續存放在一個32位字裡,並對其進行編碼。其中0:22位包含23位的小數f; 23:

30位包含8位指數e;第31位包含符號s。也就是說上面將0.65及0.

5轉換出的二進位制**,我們只能儲存23位,即使資料型別為double,也只能儲存52位,這樣大家便能看出問題出現的原因了。

擷取的二進位制**已無法正確表示0.65及0.5,根據這個二進位制**肯定無法正確得到結果0.05。

在excel進行計算時在計算機中是轉換成二進位制進算然後保留數值的,所以會出現誤差。

方法一:

將原公式利用round()函式將其保留固定的小數位。

方法二:

工具----選項----重新計算---勾選【以顯示精度為準】

2樓:

試試下面的**:**1會產生誤差、**二嘗試消除誤差。

sub tt1()

for i = 0 to 1000 step 0.1debug.print i

next

end sub

sub tt1()

for i = 0 to 1000 step 1debug.print   i / 10

next

end sub

如果原始資料是浮點數,可以先化成整數計算、比較,然後再還原成浮點數。

3樓:姓王的

用round函式不能解決嗎?那請舉例說明具體什麼誤差

excel中,如何用vba解決如下問題

4樓:匿名使用者

sub kkk()

dim i%

for i = range("g65536").end(xlup).row to 2 step -1

if isnumeric(cells(i, "g")) and cells(i, "g") > 1 then

rows(i + 1 & ":" & i + cells(i, "g") - 1).insert

end if

next

end sub

5樓:匿名使用者

sub test()

for each cl in columns("g")if cl.vaue=2 then cl.entirecolumns.insert

if cl.value=4 then cl.entirecolumns.insert 3

end sub

VBA問題求教

private sub worksheet change byval target as range if sheet1.range b1 value 2 and sheet1.range a1 value 1 then sheet2.activate 啟用sheet2表 sheet2.range ...

excel用vba如何建新工作表然後命名為表1裡面A1單元格輸入的內容

不需要用vba,直接用函式即可。使用函式來處理 excel版本參考 2013 1 a1輸入公式 replace cell filename 1,find cell filename 2 回車完成專 函式簡單解析 屬 1 cell filename 獲取活動工作薄的全路徑2 replace替換函式,此...

excel函式求教,EXCEL函式求教

你是僅僅要求固定的折舊月數嗎?我看不出來你的 中有什麼需要用到公式的,因為你的如果你是要得到某個自然年份中的折舊月數。那只是兩頭,也是就開始掉折舊的時候,可能不是正好在年頭,結束的時候可能也不是正好在年尾,而其他的,那都是整年的12個月,要得到這個結果,那其實僅僅是普通的除法而矣了,如果你是要得到某...