計量論壇

標題: 四舍六入函數模板 [打印本頁]

作者: sunrry    時間: 2021-7-28 09:11
標題: 四舍六入函數模板
本人根據四舍六入奇進偶不進原則,利用vba做了個自定義的函數,希望對大家有用。
函數語音是    Round2(被修約數據,小數位數)
例如把3.45修約保留一位小數,就是    =round(3.45,1)
此表格嵌套了vba,所以只能在此表中進行操作。

四舍六入函數模板.zip

11.59 KB, 下載次數: 114, 下載積分: 金幣 -1


作者: sunrry    時間: 2021-7-28 09:16
此函數利用vba,極大精簡了使用函數的復雜計算步驟。同時有別于目前發表論文中的方法(本人已發),能有效去除excel中浮點誤差的影響。目前其他方法基本上都是根據小數點后七位數字大小判斷進行去除浮點誤差,本方法通過強制轉換十進制解決浮點誤差。
作者: alickglyn    時間: 2021-7-28 15:45
一行excel函數解決,=ROUND(A1,a)-(MOD(A1*10^(a+1),20)=5)*10^(-a),A1是需要修約的數的單元格,a為修約位數。
作者: sunrry    時間: 2021-7-29 08:42
alickglyn 發表于 2021-7-28 15:45
一行excel函數解決,=ROUND(A1,a)-(MOD(A1*10^(a+1),20)=5)*10^(-a),A1是需要修約的數的單元格,a為修約位 ...

第一,麻煩,每次都要替換,尤其是有時候公式嵌套公式,就更復雜了
第二,excel小數存在浮點誤差影響,這個公式有誤判。
第三,你這個負數修約結果是錯的
作者: 唐家琨少    時間: 2021-7-29 09:15
謝謝樓主的分享,最近也在開始自學用宏,正好用你的來學習下。
vba版的確實好用,不過用宏的話,當表格傳到別的電腦很有可能就會失效啊。有很多電腦的excel默認禁用了宏。

作者: sunrry    時間: 2021-7-29 11:48
唐家琨少 發表于 2021-7-29 09:15
謝謝樓主的分享,最近也在開始自學用宏,正好用你的來學習下。
vba版的確實好用,不過用宏的話,當表格傳到 ...

取消禁止就可以用了。
作者: 烏拉辣拉    時間: 2021-7-29 13:41
學習一下,很有幫助
作者: sunrry    時間: 2021-7-30 12:32
大家有方便實用的工具也可以互相交流一下啊
作者: 連長    時間: 2021-7-30 15:05
修約間隔為10,你這函數就扒瞎了
作者: sunrry    時間: 2021-8-10 12:12
連長 發表于 2021-7-30 15:05
修約間隔為10,你這函數就扒瞎了

修約間隔為5和10的可以再搞個函數,或者直接拿這個數除相應的數以后修約再乘回來
作者: sunrry    時間: 2021-8-10 12:13
excel里面的修約函數也沒有2間隔、5間隔之類的
作者: 連長    時間: 2021-8-11 08:47
可以按照規則,結合excel的數據處理,自己寫個function,費點勁,但不難。

修約間隔.png (89.79 KB, 下載次數: 846)

修約間隔.png

作者: sunrry    時間: 2021-8-11 11:45
難者不會  會者不難
作者: wangyiyong7703    時間: 2023-9-18 18:32
特殊情況適應了么,3.001,8.9999。還是用了編程,要全部用內建函數。編程可以把很多漏洞補上
作者: wangyiyong7703    時間: 2023-9-18 18:34

A2輸入待修約數值,B2輸入保留小數點位數,C2輸入公式。對9.9999多的情況不適用,還待改進

IF(B2=0,IF(OR(AND(ISEVEN(INT(A2)),A2-INT(A2)=0.5),A2-INT(A2)<0.5),INT(A2),INT(A2)+1),IF(LEN(IF(OR(AND(ISEVEN(INT(A2*POWER(10,B2))),A2*POWER(10,B2)-INT(A2*POWER(10,B2))=0.5),A2*POWER(10,B2)-INT(A2*POWER(10,B2))<0.5),INT(A2*POWER(10,B2))/POWER(10,B2),(INT(A2*POWER(10,B2))+1)/POWER(10,B2)))=LEN(INT(A2)),IF(OR(AND(ISEVEN(INT(A2*POWER(10,B2))),A2*POWER(10,B2)-INT(A2*POWER(10,B2))=0.5),A2*POWER(10,B2)-INT(A2*POWER(10,B2))<0.5),INT(A2*POWER(10,B2))/POWER(10,B2),(INT(A2*POWER(10,B2))+1)/POWER(10,B2))&"."&REPT("0",B2),IF(LEN(INT(A2*POWER(10,B2)))+1>LEN((IF(OR(AND(ISEVEN(INT(A2*POWER(10,B2))),A2*POWER(10,B2)-INT(A2*POWER(10,B2))=0.5),A2*POWER(10,B2)-INT(A2*POWER(10,B2))<0.5),INT(A2*POWER(10,B2))/POWER(10,B2),(INT(A2*POWER(10,B2))+1)/POWER(10,B2)))),(IF(OR(AND(ISEVEN(INT(A2*POWER(10,B2))),A2*POWER(10,B2)-INT(A2*POWER(10,B2))=0.5),A2*POWER(10,B2)-INT(A2*POWER(10,B2))<0.5),INT(A2*POWER(10,B2))/POWER(10,B2),(INT(A2*POWER(10,B2))+1)/POWER(10,B2)))&REPT("0",LEN(INT(A2*POWER(10,B2)))-1-LEN((IF(OR(AND(ISEVEN(INT(A2*POWER(10,B2))),A2*POWER(10,B2)-INT(A2*POWER(10,B2))=0.5),A2*POWER(10,B2)-INT(A2*POWER(10,B2))<0.5),INT(A2*POWER(10,B2))/POWER(10,B2),(INT(A2*POWER(10,B2))+1)/POWER(10,B2))))),IF(OR(AND(ISEVEN(INT(A2*POWER(10,B2))),A2*POWER(10,B2)-INT(A2*POWER(10,B2))=0.5),A2*POWER(10,B2)-INT(A2*POWER(10,B2))<0.5),INT(A2*POWER(10,B2))/POWER(10,B2),(INT(A2*POWER(10,B2))+1)/POWER(10,B2)))))
作者: sunrry    時間: 2023-9-22 14:57
wangyiyong7703 發表于 2023-9-18 18:34
A2輸入待修約數值,B2輸入保留小數點位數,C2輸入公式。對9.9999多的情況不適用,還待改進

IF(B2=0,IF(OR ...

你不覺得你的公式很麻煩么。。。。
作者: wangyiyong7703    時間: 2023-9-22 17:11
sunrry 發表于 2023-9-22 14:57
你不覺得你的公式很麻煩么。。。。

開始設計有點麻煩而已,你直接復制使用有什么麻煩的。如果你用宏去做才真的麻煩。這個公式避開了宏代碼,也相當于宏代碼
作者: sunrry    時間: 2023-9-25 13:21
wangyiyong7703 發表于 2023-9-22 17:11
開始設計有點麻煩而已,你直接復制使用有什么麻煩的。如果你用宏去做才真的麻煩。這個公式避開了宏代碼, ...

對對對,你說的都對。
作者: wangyiyong7703    時間: 2023-10-2 13:05

IF(OR(AND(ISEVEN(MID(A2,FIND(".",A2)+B2,1)*1),MID(A2,FIND(".",A2)+B2+1,1)="5",IFERROR(RIGHT(A2,LEN(A2)-FIND(".",A2)-B2-1)*1,0)=0),MID(A2,FIND(".",A2)+B2+1,1)*1<5),LEFT(A2,FIND(".",A2,1)+B2),IF(IFERROR(FIND(".",LEFT(A2,FIND(".",A2,1)*1+B2)*1+IF(A2*1<0,-1,1)/POWER(10,B2),1),0)=0,LEFT(A2,FIND(".",A2,1)*1+B2)*1+IF(A2*1<0,-1,1)/POWER(10,B2)&"."&REPT("0",B2),LEFT(A2,FIND(".",A2,1)*1+B2)*1+IF(A2*1<0,-1,1)/POWER(10,B2)&REPT("0",B2-(LEN(LEFT(A2,FIND(".",A2,1)*1+B2)*1+IF(A2*1<0,-1,1)/POWER(10,B2))-IFERROR(FIND(".",LEFT(A2,FIND(".",A2,1)*1+B2)*1+IF(A2*1<0,-1,1)/POWER(10,B2),1),0)))))
作者: wangyiyong7703    時間: 2023-10-2 13:06
sunrry 發表于 2023-9-25 13:21
對對對,你說的都對。

新的算法做的,麻煩抽空指正一下。
作者: sunrry    時間: 2023-10-7 13:09
wangyiyong7703 發表于 2023-10-2 13:06
新的算法做的,麻煩抽空指正一下。

1、小數點有效位數為0直接報錯
2、多次計算后的浮點小數無法避免,后面一堆錯誤。(可以看圖,B2=A2+0.1,C2=B2+0.1,以此類推)

作者: sunrry    時間: 2023-10-7 13:20
=IF(ABS(ABS(A2/1*10^B2-TRUNC(A2/1,B2)*10^B2)-0.5)<10^-7,CEILING(ABS(TRUNC(A2/1,B2)),2*10^-B2)*SIGN(A2/1)*1,ROUND(A2/1,B2)*1)
作者: wangyiyong7703    時間: 2023-10-7 15:05
sunrry 發表于 2023-10-7 13:09
1、小數點有效位數為0直接報錯
2、多次計算后的浮點小數無法避免,后面一堆錯誤。(可以看圖,B2=A2+0.1, ...

謝謝,,,,,,

作者: wangyiyong7703    時間: 2023-10-7 15:17
本帖最后由 wangyiyong7703 于 2023-10-7 15:29 編輯
sunrry 發表于 2023-10-7 13:20
=IF(ABS(ABS(A2/1*10^B2-TRUNC(A2/1,B2)*10^B2)-0.5)


我設計的是保留多少位小數的,1位以上,不含0位的。0位及以上可以再設計。主要是出現整數后的加零補位。你說的浮點問題具體指出來,我的是沒有的

作者: wangyiyong7703    時間: 2023-10-7 18:07
sunrry 發表于 2023-10-7 13:09
1、小數點有效位數為0直接報錯
2、多次計算后的浮點小數無法避免,后面一堆錯誤。(可以看圖,B2=A2+0.1, ...

我看了一下,不是我要解決浮點問題,是你的輸入本來就有問題,6.94999999999999,不是顯示的6.95

微信圖片_20231007180624.png (14.14 KB, 下載次數: 710)

微信圖片_20231007180624.png

作者: wangyiyong7703    時間: 2023-10-7 18:08
wangyiyong7703 發表于 2023-10-7 15:05
謝謝,,,,,,

幫我分析一下,16-18有出現問題了

微信圖片_20231007153504.png (23.87 KB, 下載次數: 368)

微信圖片_20231007153504.png

作者: wangyiyong7703    時間: 2023-10-7 18:12
sunrry 發表于 2021-7-29 11:48
取消禁止就可以用了。

正因為宏代碼容易被殺毒軟件干掉,才一直追求避開宏代碼。如果用自定義函數和格式設置就方便多了。跟尺規作圖類似,故意增加難度。
作者: 路云    時間: 2023-11-15 00:17
sunrry 發表于 2023-9-22 14:57
你不覺得你的公式很麻煩么。。。。

您說得沒錯。那不是數值修約,而是文本處理。可以參閱我與他的討論:保留位數EXCEL實現


作者: sunrry    時間: 2023-11-23 13:44
路云 發表于 2023-11-15 00:17
您說得沒錯。那不是數值修約,而是文本處理。可以參閱我與他的討論:保留位數EXCEL實現 ...

而且他只考慮輸入一個小數的情況,如果是運算的結果,他無法避免浮點數字的影響。
作者: luocx    時間: 2023-11-23 17:03
謝謝樓主的分享,最近也在開始自學用宏,正好用你的來學習下。
作者: songliangyu    時間: 2023-11-26 11:00
感謝樓主分享
作者: Mia    時間: 2023-12-3 20:23
感謝樓主分享
作者: yuanxu2021    時間: 2024-11-30 14:53
感謝樓主分享。




歡迎光臨 計量論壇 (http://www.bkd208.com/) Powered by Discuz! X3.4
主站蜘蛛池模板: 国产人妖在线视频| 日本狂喷奶水在线播放212| 国产色司机在线视频免费观看| 免费无码一区二区三区蜜桃大| 一本一本久久a久久精品综合麻豆| 被民工蹂躏的雯雅婷| 日本高清无卡码一区二区久久| 国产在线视精品麻豆| 久久国产精品无码一区二区三区| 韩国朋友夫妇:交换4| 日本在线观看电影| 国产av人人夜夜澡人人爽麻豆| 久久99精品久久久久久hb无码| 老子的大ji巴cao死你| 成人网免费观看| 六月婷婷在线观看| AV无码精品一区二区三区宅噜噜| 激情综合色五月六月婷婷| 國产一二三内射在线看片| 亚洲成色在线综合网站| 福利视频免费看| 日韩精品一区二区三区在线观看 | 国产一卡2卡3卡4卡网站免费| 久久亚洲精品成人无码网站| 老鸭窝在线视频观看| 娇小老少配xxxxx丶| 亚洲精品无码久久毛片| 热久久这里是精品6免费观看| 最近中文字幕mv在线视频www | 无码任你躁久久久久久老妇| 又粗又大又爽又长又紧又水| a级特黄毛片免费观看| 欧美日韩一区二区三区四区 | 中文天堂最新版www| 狠狠躁日日躁夜夜躁2022麻豆| 国产视频第二页| 乱岳合集500篇| 翁虹三级在线伦理电影| 处破之轻点好疼十八分钟| 亚洲人成在线影院| 蜜桃成熟时33d在线|