計量論壇

 找回密碼
 立即注冊

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-18 10:34

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲精品午夜国产va久久成人| 51视频国产精品一区二区| 香蕉视频在线看| 欧美成人免费观看的| 国产美女自慰在线观看| 人人爽人人澡人人高潮| 99精品国产第一福利网站| 波多野结衣伦理片| 国产黄色片91| 亚洲欧美人成综合导航 | 8av国产精品爽爽ⅴa在线观看| 狠狠色噜噜狠狠狠888米奇视频| 女人182毛片a级毛片| 人与动人物欧美网站| 99国产在线播放| 欧美日韩国产综合视频在线看| 国产精品欧美一区二区三区不卡| 亚洲日韩图片专区第1页| **俄罗斯毛片免费| 最新欧洲大片免费在线| 国产午夜亚洲精品国产| 中文无码乱人伦中文视频在线V | 成人免费小视频| 日韩精品一区二区三区在线观看| 国产妇女馒头高清泬20p多| 久久精品国产99国产精品亚洲 | 好男人视频网站| 人妻中文字幕乱人伦在线| 97精品伊人久久大香线蕉| 欧美性狂猛xxxxxbbbbb| 国产激情一区二区三区| 久久只有这里的精品69| 色妞www精品视频一级下载| 快猫官方网站是多少| 人妻av无码一区二区三区| 67194成手机免费观看| 日韩黄色免费观看| 国产69精品久久久久9999| jizz大全欧美| 欧美性猛交xxxx免费看蜜桃| 国产在线果冻传媒在线观看|