計量論壇

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
打印 上一主題 下一主題

[討論] 保留位數EXCEL實現

[復制鏈接]
跳轉到指定樓層
1#
wangyiyong7703 發表于 2023-9-16 01:00:30 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
A2輸入待修約數字,B2輸入保留小數點位數,C2輸入公式

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)))))

保留多少位小數點.xlsx

9.49 KB, 下載次數: 60, 下載積分: 金幣 -1

2#
 樓主| wangyiyong7703 發表于 2023-9-16 12:39:01 | 只看該作者
對9.99999這種情況不適用,還待改進
3#
zcxxwxu 發表于 2023-9-18 16:23:20 | 只看該作者
點個贊,點個贊,點個贊,點個贊。
4#
小阿飛飛 發表于 2023-9-28 15:34:44 | 只看該作者
=IF(MOD(ABS(R5*POWER(10,Y5)),2)<=0.5,ROUNDDOWN(R5,Y5),ROUND(R5,Y5))   
不用那么麻煩吧我用的是這個
5#
 樓主| wangyiyong7703 發表于 2023-9-29 12:13:12 | 只看該作者
小阿飛飛 發表于 2023-9-28 15:34
=IF(MOD(ABS(R5*POWER(10,Y5)),2)

顯然主邏輯程序是對的,但你要考慮特殊情況,在特殊情況下如0.999995,0.100005,您還能得出您想要的答案么。這個問題的難點就是特殊情況BUG,不考慮特殊情況,答案很多。還有浮點問題。好多。但怎樣規避是個問題。
6#
軒轅夢 發表于 2023-9-30 16:35:35 | 只看該作者
感謝分享,下載看看
7#
路云 發表于 2023-9-30 23:16:49 | 只看該作者
本帖最后由 路云 于 2023-9-30 23:53 編輯
wangyiyong7703 發表于 2023-9-29 12:13
顯然主邏輯程序是對的,但你要考慮特殊情況,在特殊情況下如0.999995,0.100005,您還能得出您想要的答案 ...

其實沒那么復雜,只要建一個自定義函數,應用時直接調用即可。

465留雙自定義函數:

Function Yround(ByVal a As Double, Optional ByVal d As integer)

        Yround=Round(CDec(a),d)

End Function

注:參數a為傳值型雙精度變量(擬修約數),參數d為可選整型參數(需保留的小數位數)。

如您1樓的例子,只需在A2單元格輸入擬修約數,B2單元格輸入欲保留的小數位數,在C2單元格中直接調用自定義函數(輸入“=Yround(A2, B2)”)即可得到修約結果。無論A2單元格的擬修約數是正數還是負數,都會按自動按照“465留雙”的修約規則進行修約。

8#
 樓主| wangyiyong7703 發表于 2023-10-1 14:12:16 | 只看該作者
路云 發表于 2023-9-30 23:16
其實沒那么復雜,只要建一個自定義函數,應用時直接調用即可。4舍6入5留雙自定義函數:Function Yround(ByV ...

自定義函數也用到宏代碼,不能這樣操作,一般人用起來不方便
9#
 樓主| wangyiyong7703 發表于 2023-10-1 14:14:02 | 只看該作者
路云 發表于 2023-9-30 23:16
其實沒那么復雜,只要建一個自定義函數,應用時直接調用即可。4舍6入5留雙自定義函數:Function Yround(ByV ...

我們的目標是避開宏代碼,完全用內建函數實現
10#
 樓主| wangyiyong7703 發表于 2023-10-1 14:53:51 | 只看該作者
本帖最后由 wangyiyong7703 于 2023-10-1 14:56 編輯

IF(IFERROR(FIND(".",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)),1),0)=0,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(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",IFERROR(FIND(".",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)),1),0)+B2-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)))))
11#
 樓主| wangyiyong7703 發表于 2023-10-1 14:54:21 | 只看該作者
本帖最后由 wangyiyong7703 于 2023-10-1 15:16 編輯

代碼進行了優化
適應范圍更廣,不用宏代碼,完全避開了自定義函數和程序用到宏代碼。
12#
 樓主| wangyiyong7703 發表于 2023-10-1 15:17:34 | 只看該作者
從0.0001到100.0000,全部合格,保留2位小數
13#
路云 發表于 2023-10-1 20:30:38 | 只看該作者
本帖最后由 路云 于 2023-10-1 20:41 編輯
wangyiyong7703 發表于 2023-10-1 14:12
自定義函數也用到宏代碼,不能這樣操作,一般人用起來不方便

建立自定義函數,目的就是要讓普通用戶能用起來呀。用時就像內部函數一樣調用即可。你鍵入那么復雜的函數都能用,難道鍵入“=Yroug(A2, B2)”還更難?

您這個公式我試了一下,存在以下問題:

-1.035000000,修約結果沒有按照“4舍6入5留雙”的修約規則修約至-1.04,而是修約至-1.03。

14#
 樓主| wangyiyong7703 發表于 2023-10-1 21:15:59 | 只看該作者
公式出現浮點問題,正在改進,新的方法有點問題,
15#
 樓主| wangyiyong7703 發表于 2023-10-1 21:16:28 | 只看該作者
邏輯沒有問題,避開浮點算法已經找到
16#
 樓主| wangyiyong7703 發表于 2023-10-1 21:17:39 | 只看該作者
路云 發表于 2023-10-1 20:30
建立自定義函數,目的就是要讓普通用戶能用起來呀。用時就像內部函數一樣調用即可。你鍵入那么復雜的函數 ...

然后有時候是正常的,兩種情況都有
17#
 樓主| wangyiyong7703 發表于 2023-10-1 21:41:25 | 只看該作者
路云 發表于 2023-10-1 20:30
建立自定義函數,目的就是要讓普通用戶能用起來呀。用時就像內部函數一樣調用即可。你鍵入那么復雜的函數 ...

沒有那容易,必須啟用宏,如果啟用宏,會帶來很多麻煩
18#
 樓主| wangyiyong7703 發表于 2023-10-1 23:15:54 | 只看該作者
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+1/POWER(10,B2),1),0)=0,LEFT(A2,FIND(".",A2,1)*1+B2)*1+1/POWER(10,B2)&"."&REPT("0",B2),LEFT(A2,FIND(".",A2,1)*1+B2)*1+1/POWER(10,B2)&REPT("0",B2-(LEN(LEFT(A2,FIND(".",A2,1)*1+B2)*1+1/POWER(10,B2))-IFERROR(FIND(".",LEFT(A2,FIND(".",A2,1)*1+B2)*1+1/POWER(10,B2),1),0)))))
19#
 樓主| wangyiyong7703 發表于 2023-10-2 10:02:30 | 只看該作者
=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+1/POWER(10,B2),1),0)=0,LEFT(A2,FIND(".",A2,1)*1+B2)*1+1/POWER(10,B2)&"."&REPT("0",B2),LEFT(A2,FIND(".",A2,1)*1+B2)*1+1/POWER(10,B2)&REPT("0",B2-(LEN(LEFT(A2,FIND(".",A2,1)*1+B2)*1+1/POWER(10,B2))-IFERROR(FIND(".",LEFT(A2,FIND(".",A2,1)*1+B2)*1+1/POWER(10,B2),1),0))))) 用的新的算法歡迎指正
20#
 樓主| wangyiyong7703 發表于 2023-10-2 10:19:28 | 只看該作者
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))))) 適合負數修約
21#
路云 發表于 2023-10-2 22:45:28 | 只看該作者
wangyiyong7703 發表于 2023-10-1 21:41
沒有那容易,必須啟用宏,如果啟用宏,會帶來很多麻煩

不明白您說的很多麻煩到底是什么麻煩。我們單位在LIMS系統中應用這么多年,從來沒有聽說過遇到什么麻煩。網絡版office安裝時就已經進行了安全設置,自定義函數都放在安全可信路徑下,原始記錄等都已制作成了智能型空白模板,試驗/檢測人員調用模板生成原始記錄的操作非常簡單,對于選擇項只需點擊下拉列表框、復選框、控件等進行選擇,只需錄入檢測數據,所有的數據處理和結果都是自動完成,試驗/檢測人員根本沒有感覺,也無需其他任何操作,完全做成了一種“傻瓜型”的智能Excel模板。

22#
 樓主| wangyiyong7703 發表于 2023-10-3 07:48:47 | 只看該作者
路云 發表于 2023-10-2 22:45
不明白您說的很多麻煩到底是什么麻煩。我們單位在LIMS系統中應用這么多年,從來沒有聽說過遇到什么麻煩。 ...

單機版的麻煩,您的網絡版加持當然可以。
23#
路云 發表于 2023-10-3 11:12:01 | 只看該作者
wangyiyong7703 發表于 2023-10-3 07:48
單機版的麻煩,您的網絡版加持當然可以。

單機版的也一樣,又不要用戶去編輯宏代碼,就像調用普通內部函數一樣。

24#
 樓主| wangyiyong7703 發表于 2023-10-3 13:53:41 | 只看該作者
那您發一個自定義的函數,我用二十多年了,沒見過
25#
路云 發表于 2023-10-4 08:14:59 | 只看該作者
本帖最后由 路云 于 2023-10-4 10:02 編輯
wangyiyong7703 發表于 2023-10-3 13:53
那您發一個自定義的函數,我用二十多年了,沒見過

我說的“用戶”,不是指OFFICE用戶,而是指具體填寫原始記錄的檢測/校準人員。如果見過,那就不叫“自定義函數”了。

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|Archiver|計量論壇 ( 閩ICP備06005787號-1—304所 )
電話:0592-5613810 QQ:473647 微信:gfjlbbs閩公網安備 35020602000072號

GMT+8, 2025-7-19 06:37

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品福利视频网站| 两领导在车上吃我的奶| 日本在线xxxx| 欧美jizz18| 国产男人午夜视频在线观看| 亚洲图片小说区| 你懂得视频在线观看| 欧美乱xxxxx| 国产放荡对白视频在线观看| 五月婷婷伊人网| 风间由美性色一区二区三区| 在线www中文在线| 欧美国产日本高清不卡| 国产精品亚洲欧美| 亚洲va久久久噜噜噜久久| 992tv国产人成在线观看| 日韩av激情在线观看| 国产一级毛片在线| 三年片在线观看免费观看大全中国| 精品深夜av无码一区二区| 好男人看视频免费2019中文| 亚洲综合精品第一页| 8x国产在线观看| 最近中文字幕高清2019中文字幕 | 狠狠色噜噜狠狠狠888米奇视频| 女人18片毛片60分钟| 亚洲男人的天堂在线播放| 1000部拍拍拍18勿入免费凤凰福利| 欧洲美熟女乱又伦免费视频| 国产在线观看中文字幕| 久久99精品久久久久久不卡| 精品久久久久久无码中文字幕| 夜夜爽免费视频| 亚洲中文字幕av在天堂| 青柠直播在线观看高清播放| 怡红院AV一区二区三区| 亚洲精品动漫免费二区| 免费成人福利视频| 收集最新中文国产中文字幕| 免费**毛片在线播放直播| 2021韩国三级理论电影网站|