計量論壇

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

[討論] 保留位數EXCEL實現

[復制鏈接]
51#
 樓主| wangyiyong7703 發表于 2023-10-8 19:56:46 | 只看該作者
這個是150的修約

微信圖片_20231008195555.png (8.74 KB, 下載次數: 529)

微信圖片_20231008195555.png

微信圖片_20231008195603.png (47.5 KB, 下載次數: 532)

微信圖片_20231008195603.png
52#
 樓主| wangyiyong7703 發表于 2023-10-8 19:58:34 | 只看該作者
上面是vb做的,容易實現
53#
 樓主| wangyiyong7703 發表于 2023-10-8 20:13:27 | 只看該作者
路云 發表于 2023-10-8 19:35
打賭就沒有意思了。我只是說“恐怕就不是VBA宏能夠解決的了”。EXCEL的數值處理范圍區間大小是有限的。您 ...

1.POWER()這個函數是有點問題,我的公式目前的缺陷就是它帶來的。
2.暫時沒有想到更好的辦法,如果你有好的算法,歡迎提出來。
3.用他來定位小數點確實是個好辦法,但缺陷是數位過大的時候問題就來了。如果只是解決數位小的問題,這個不在話下。
4.關鍵要提出一些好的反例,利于優化公式,給網友們提供方便實用的公式,

評分

參與人數 1威望 +2 收起 理由
admin + 2 贊一個!

查看全部評分

54#
 樓主| wangyiyong7703 發表于 2023-10-10 08:38:50 | 只看該作者
避開格式設置問題公式如下:f(A1,B1)為網上或文獻中提供的各種數值計算處理的四舍六入五成雙公式,text(f(A1,B1),"0." & rept("0",B1).這樣不用格式設置。A1為待修約全數值,B1為修約要求的保留小數點位數

補充內容 (2023-10-10 16:33):
text(f(A1,B1),"0." & rept("0",B1))
55#
路云 發表于 2023-10-13 23:58:41 | 只看該作者
wangyiyong7703 發表于 2023-10-8 19:52
1.麻煩您舉一些實質性的問題進行討論,這樣很累,沒有意義,之前您找到的很多有意義的反例很好;
2.純數 ...

2.純數字文本也可以參與其它計算,強制進行轉換。這里解決的是尾數補0的情況,用文本表示是不得已的事。

3.修約后尾數0后,系統自動去除,您的自定義函數是一個致命的問題。如果靠設置去解決,那您的公式確實看起來很好。

5.你用設置格式解決尾數補0問題,確實不是很高端,我也是想避開。其實有很多內建函數配合格式設置可以做到,完全不用VB,這個早就實現了。

EXCEL中“設置單元格格式”功能模塊,就是為了解決各種數據格式的顯示問題,運用公式、函數的目的,是解決“四舍六入五留雙”的問題。修約后的尾數補0,不是修約的問題,而是顯示格式的問題。所有的格式顯示問題,都可以用文本處理的方式去解決,那還需要“設置單元格格式”這一模塊嗎?有現成的、簡單的、適用的工具你不用,非要用文本處理的方式去解決,那是你的自由。

6.發揮內建函數作用,不靠其他方法是我追求的。因為您用vb做的自定義函數沒多大意思,我實不屑取,避開vb,才是我們想要的。用vb超百位的修約我也可以做到,早就做到了。

你可以有你的追求,你認為自定義函數沒多大意思那也是你個人的看法,我只是提供一種思路與方法,供您參考,我又沒有逼你一定要用。我不知道研究超百位的修約又有何意思,難道我們要去研究圓周率?現實當中超過10位小數的修約應用有多少?

POWER()函數只是解決實數的乘冪問題,解決不了修約后的尾數補0問題。自定義函數已經解決了修約的問題,無需用到這個函數。

避開格式設置問題公式如下:f(A1B1)為網上或文獻中提供的各種數值計算處理的四舍六入五成雙公式,Text(f(A1,B1),"0." & rept("0",B1).這樣不用格式設置。A1為待修約全數值,B1為修約要求的保留小數點位數

所謂公式f(A1,B1),我也在網上找了很多,但最簡單易用的,就是我7樓提供的這個。用這個自定義函數,TEXT()公式就不靈了。

您的公式最大的問題是改變了數值的性質,將其變成了“文本”,解決不了帶符號顯示的問題,也避免不了37截圖所示的非數值問題。

56#
 樓主| wangyiyong7703 發表于 2023-10-14 10:13:33 | 只看該作者
路云 發表于 2023-10-13 23:58
2.純數字文本也可以參與其它計算,強制進行轉換。這里解決的是尾數補0的情況,用文本表示是不得已的事。 ...

1.=TEXT(yround(A7,B7),"0."&REPT("0",B7)……原來顯示0.1,現在為0.100.用您的公式很好用呀,配合我提供的 TEXT(...rept..)公式,只是用了VB也要用公式設置,覺得太LOW了。
2.用vb我早就實現了上百位的修約,還不用格式設置,單元格有255個字符顯示,說明我可以修約2百多位數是沒有問題的。
3.用簡單的公式無法實現超多位數的修約,不然沒有必要在您的面前弄斧頭了,那不是丟人現眼,沒有必要發這個貼了。
4.文獻和網上好多公式沒有解決尾數為0自動不顯示,另一個超大位數的問題。我希望您也來提供一些好的算法。
5.尾數為0自動舍去,補零是須要的,文本是解決方法之一,用text也相當于手動設置改為公式設置,充分利用rept這個函數后,可以自動設置了。您用手動格式設置也可以。
6.因為之前很多有很多公式是用的數值處理,數值處理天然會帶有位數限制,修約結果受到影響。所以想到將數字進行文本方式處理,vb設計結果顯示是成功的。但用內建函數沒有找到很好的辦法,POWER相對來說表現效果好一點,但還是只能到15位,其它的基本只能到10位。當然目前只是想到用分段處理算法,但效果可能有限,只能到30位,而且公式很長。目前沒有好的算法。

微信圖片_20231014095513.png (21.64 KB, 下載次數: 511)

微信圖片_20231014095513.png
57#
 樓主| wangyiyong7703 發表于 2023-10-14 10:23:38 | 只看該作者
本帖最后由 wangyiyong7703 于 2023-10-14 10:29 編輯
路云 發表于 2023-10-13 23:58
2.純數字文本也可以參與其它計算,強制進行轉換。這里解決的是尾數補0的情況,用文本表示是不得已的事。 ...


1.至于您說的符號顯示問題,我覺不是個問題,就是正號顯示問題,負數修約到我這不成為問題,您用負數算一下就可以了。
2.您要舉一個實例,哪個地方要顯示正號;我是沒有見過必須要在修約之后顯示正號的;您自己的公式也沒有正號啊,為什么要求我的公式顯示正號。
3.我之所以不想理會正號問題,是覺得這個問題提的有點怪。一般人不會提出這種問題,到您這里成為問題???!!!
4.if(A1>0,"+" & f(A1,b1),f(A1,b1))如果你須要這個的話,我給提供您這個方法f(A1,b1)為無法顯示正號的公式。這種問題太LOW。
=IF(A15*1>0,"+" & IF(OR(AND(ISEVEN(MID(A15,FIND(".",A15)+B15,1)*1),MID(A15,FIND(".",A15)+B15+1,1)="5",IFERROR(RIGHT(A15,LEN(A15)-FIND(".",A15)-B15-1)*1,0)=0),MID(A15,FIND(".",A15)+B15+1,1)*1<5),LEFT(A15,FIND(".",A15,1)+B15),IF(IFERROR(FIND(".",LEFT(A15,FIND(".",A15,1)*1+B15)*1+IF(A15*1<0,-1,1)/POWER(10,B15),1),0)=0,LEFT(A15,FIND(".",A15,1)*1+B15)*1+IF(A15*1<0,-1,1)/POWER(10,B15)&"."&REPT("0",B15),LEFT(A15,FIND(".",A15,1)*1+B15)*1+IF(A15*1<0,-1,1)/POWER(10,B15)&REPT("0",B15-(LEN(LEFT(A15,FIND(".",A15,1)*1+B15)*1+IF(A15*1<0,-1,1)/POWER(10,B15))-IFERROR(FIND(".",LEFT(A15,FIND(".",A15,1)*1+B15)*1+IF(A15*1<0,-1,1)/POWER(10,B15),1),0))))),IF(OR(AND(ISEVEN(MID(A15,FIND(".",A15)+B15,1)*1),MID(A15,FIND(".",A15)+B15+1,1)="5",IFERROR(RIGHT(A15,LEN(A15)-FIND(".",A15)-B15-1)*1,0)=0),MID(A15,FIND(".",A15)+B15+1,1)*1<5),LEFT(A15,FIND(".",A15,1)+B15),IF(IFERROR(FIND(".",LEFT(A15,FIND(".",A15,1)*1+B15)*1+IF(A15*1<0,-1,1)/POWER(10,B15),1),0)=0,LEFT(A15,FIND(".",A15,1)*1+B15)*1+IF(A15*1<0,-1,1)/POWER(10,B15)&"."&REPT("0",B15),LEFT(A15,FIND(".",A15,1)*1+B15)*1+IF(A15*1<0,-1,1)/POWER(10,B15)&REPT("0",B15-(LEN(LEFT(A15,FIND(".",A15,1)*1+B15)*1+IF(A15*1<0,-1,1)/POWER(10,B15))-IFERROR(FIND(".",LEFT(A15,FIND(".",A15,1)*1+B15)*1+IF(A15*1<0,-1,1)/POWER(10,B15),1),0))))))

微信圖片_20231014102913.png (29.61 KB, 下載次數: 511)

微信圖片_20231014102913.png
58#
 樓主| wangyiyong7703 發表于 2023-10-14 10:42:35 | 只看該作者
1.至于您提的非數值問題,那這個問題你的公式也做到了嗎?把一個參有字母數字串去修約,這個反例夠可以了的。
2.A1里面輸入的待修約全數值是公式算出來的結果,比如平均值公式什么的,搞檢測的公式復雜一點,怎么會含有字母,除非您跳出了十進制。
3.A1里面手動輸入才會有帶字母的全數值。那是輸入的問題。要解決的是輸入規范的問題。不是這里要解決的。
4.如果您提出的反例只能到這個層次,那說明我的公式在處理數值上是沒有大的漏洞了。
5.之前其它貼子里面有人也提出了輸入問題,經過多次運算之后 的浮點問題,遺傳到我的公式里面,但我作出了合理解決。輸入階段的問題,在輸入階段解決。不能要求修約公式是萬能的。當然用vb可以解決有效性輸入的問題,但這個效率低了一點。在其它地方解決輸入問題可能好一點。
59#
路云 發表于 2023-10-15 01:39:21 | 只看該作者
本帖最后由 路云 于 2023-10-15 13:53 編輯
wangyiyong7703 發表于 2023-10-14 10:13
1.=TEXT(yround(A7,B7),"0."&REPT("0",B7)……原來顯示0.1,現在為0.100.用您的公式很好用呀,配合我提供 ...

1.=TEXT(yround(A7,B7),"0."&REPT("0",B7)……原來顯示0.1,現在為0.100.用您的公式很好用呀,配合我提供的 TEXT(...rept..)公式,只是用了VB也要用公式設置,覺得太LOW了。

不是公式設置,而是格式設置,不要把概念給搞混了。

2.用vb我早就實現了上百位的修約,還不用格式設置,單元格有255個字符顯示,說明我可以修約2百多位數是沒有問題的。

3.用簡單的公式無法實現超多位數的修約,不然沒有必要在您的面前弄斧頭了,那不是丟人現眼,沒有必要發這個貼了。

4.文獻和網上好多公式沒有解決尾數為0自動不顯示,另一個超大位數的問題。我希望您也來提供一些好的算法。

我早就說了,實際應用中,我幾十年也沒有遇到過超多位數的修約案例與需求。不想在已經能夠滿足實際需求的情況下,再去研究這種不切實際的問題。位數0自動不顯示,本就是單元格格式沒有設置所致。有了簡單易用的單元格格式設置功能模塊,我為什么還要去動這個腦筋呢?假如我現在要改成百分比的格式顯示,你是不是要重新修改公式呀?

2.您要舉一個實例,哪個地方要顯示正號;我是沒有見過必須要在修約之后顯示正號的;您自己的公式也沒有正號啊,為什么要求我的公式顯示正號。

3.我之所以不想理會正號問題,是覺得這個問題提的有點怪。一般人不會提出這種問題,到您這里成為問題???!!!

我33樓的實際案例,“示值誤差”的計算,其最終的修約結果,不就是要求除0誤差外,必須帶正負號嗎。

1.至于您提的非數值問題,那這個問題你的公式也做到了嗎?把一個參有字母數字串去修約,這個反例夠可以了的。

你的擬修約數是“文本”,誤敲入字母或其他符號完全是有可能的。

2.A1里面輸入的待修約全數值是公式算出來的結果,比如平均值公式什么的,搞檢測的公式復雜一點,怎么會含有字母,除非您跳出了十進制。

既然是公式算出來的,那么計算結果的小數位數,完全有可能會少于你需要保留的小數位數。

3.A1里面手動輸入才會有帶字母的全數值。那是輸入的問題。要解決的是輸入規范的問題。不是這里要解決的。

你的單元格格式就是“文本”,誤操作完全是有可能的,而且輸入的其他字符完全符合“文本”的要求,是你沒有對輸入的數據進行“有效性控制”、攔截。

另外強調一點,實際應用中,第二列的“保留小數位數”,根本就無需在原始記錄的表格中出現,也無需去輸入。相應單元格的數據處理后的最終結果的保留小數位數,應該是在編制“原始記錄表”模板時,就已經是確定,可以固化的。



60#
 樓主| wangyiyong7703 發表于 2023-10-15 08:09:21 | 只看該作者
你的反例舉得很好啊,之前跟你講過,后面輸入數據處理即可,即對于待修約數有效數字比修約要求的少,包括浮點輸入,誤輸入都可以對其進行過慮,通過加round過濾浮點問題,通過f(x)&"000000"解決待修約位數少的問題。
61#
 樓主| wangyiyong7703 發表于 2023-10-15 08:20:11 | 只看該作者
從實際角度講應盡量減少修約后精度提高的問題,不能拿這個說事。誤差確須帶正負符號的話,你加我的算法不就可以了。如果把這個算法也加到普通修約公式里面去,那不還要增加一個支鏈判定是不是誤差。搞笑,正確方向提反例好不好
62#
 樓主| wangyiyong7703 發表于 2023-10-15 08:24:45 | 只看該作者
增加位數,不用vb,不用手動設置公式是我個人增加難度,不在這里惡心我,好不好,交待多少回了。你要知道excel愛好者有這么一群人就愛干這個事。
63#
 樓主| wangyiyong7703 發表于 2023-10-15 08:28:04 | 只看該作者
路云 發表于 2023-10-15 01:39
1.=TEXT(yround(A7,B7),"0."&REPT("0",B7)……原來顯示0.1,現在為0.100.用您的公式很好用呀,配合我提供 ...

有質量的反例希望你多提點,重復提有什么意思。提了那么多,還不如別人提的一個浮點問題有質量。
64#
路云 發表于 2023-10-15 14:31:48 | 只看該作者

你的反例舉得很好啊,之前跟你講過,后面輸入數據處理即可,即對于待修約數有效數字比修約要求的少,包括浮點輸入,誤輸入都可以對其進行過慮,通過加round過濾浮點問題,通過f(x)&"000000"解決待修約位數少的問題。

如果工作表函數ROUND()能夠解決問題的話,也就用不著去用VB函數ROUND()去編制自定義函數了。

從實際角度講應盡量減少修約后精度提高的問題,不能拿這個說事。誤差確須帶正負符號的話,你加我的算法不就可以了。如果把這個算法也加到普通修約公式里面去,那不還要增加一個支鏈判定是不是誤差。搞笑,正確方向提反例好不好

數據處理的函數公式都一樣,僅僅是顯示格式(是否帶正負號)的要求不同,我為什么要去重新修改函數公式?是否帶正負號顯示,與數據處理的函數公式沒有任何關系。計算過程與步驟完全一致,通過單元格格式設置,你需要顯示符號(如“示值誤差”)就顯示符號,不需要顯示符號(如“示值重復性”)就不顯示符號。這個信息在編制原始記錄模板時,還不知道嗎?需要你去另加支鏈來判定是否需要顯示符號嗎?

增加位數,不用vb,不用手動設置公式是我個人增加難度,不在這里惡心我,好不好,交待多少回了。你要知道excel愛好者有這么一群人就愛干這個事。

我沒有惡心你。追求難度是你的事,我無權干預。提供參考方案是我的事,采不采納是你的自由,沒有人強迫你一定要怎么樣。你覺得你的方法好,你就用你的方法好了,有什么好糾結的呢。

你的這種思路和方案,我不是沒有研究嘗試過,編制的原始記錄模板也不下幾十上百份。最終的體驗感覺是不靈活,通用性差,還需要在表格中輸入并不需要在原始記錄中出現的“保留小數位數”,以及需要根據不同的顯示格式需求來修改公式。我這里只是談我個人的體驗感,不代表其他人的體驗感。

有質量的反例希望你多提點,重復提有什么意思。提了那么多,還不如別人提的一個浮點問題有質量。

我不清楚您所說的“質量反例”是啥意思。如果您認為我提出的問題都不是問題,那就只當我沒說好了。浮點問題我早就說了,用VBROUND()函數,取代工作表函數ROUND()就可以解決。還要怎么說呢?

65#
 樓主| wangyiyong7703 發表于 2023-10-15 14:49:52 | 只看該作者
路云 發表于 2023-10-15 14:31
你的反例舉得很好啊,之前跟你講過,后面輸入數據處理即可,即對于待修約數有效數字比修約要求的少,包括浮 ...

這個貼子不歡迎你好不好,不是真心為廣大網友考慮,你另開一貼吧,讓別人評價你那無敵的修約公式。不要回復了,知趣點
66#
路云 發表于 2023-10-15 15:51:20 | 只看該作者

放心好了,不會再回復你了。

我并沒有說我的自定義函數無敵,但愿你搭臺唱戲能吸引更多的量友,受益你那萬能的修約公式。

67#
 樓主| wangyiyong7703 發表于 2023-10-16 13:07:10 | 只看該作者
歡迎善意的網友們提出好的意見和建議。多提出在制作模版中遇到的修約公式問題,一起探討解決方案。公式原創不易,希望得到網友推動進步
68#
銀光戰火 發表于 2024-12-23 15:18:10 | 只看該作者
我的天爺啊,兩位大神中的大神,我記得wps里有個公式roundbanke,就是四舍六入五留雙啊

微信圖片_20241223151730.png (12.24 KB, 下載次數: 21)

微信圖片_20241223151730.png
69#
lo452355 發表于 2024-12-27 16:33:40 | 只看該作者
銀光戰火 發表于 2024-12-23 15:18
我的天爺啊,兩位大神中的大神,我記得wps里有個公式roundbanke,就是四舍六入五留雙啊 ...

這是尋根問底了,roundbanke的來源了
70#
woaijiliang666 發表于 2024-12-28 17:16:02 | 只看該作者
1111111不錯呀
71#
 樓主| wangyiyong7703 發表于 2025-1-4 15:21:44 | 只看該作者
銀光戰火 發表于 2024-12-23 15:18
我的天爺啊,兩位大神中的大神,我記得wps里有個公式roundbanke,就是四舍六入五留雙啊 ...

roundbank的表現還是有漏洞的,沒有我的公式表現好。正是因為目前開發的好多自動修約的公式有問題,才想到改進。漏洞推動進步,歡迎提出反例。

56542c1dc46c1ce8dfee2f3ed175f68.png (8.49 KB, 下載次數: 24)

56542c1dc46c1ce8dfee2f3ed175f68.png
72#
 樓主| wangyiyong7703 發表于 2025-1-4 15:25:06 | 只看該作者

一般不是超長的數值,這個足以應付了

本帖最后由 wangyiyong7703 于 2025-1-4 15:26 編輯
銀光戰火 發表于 2024-12-23 15:18
我的天爺啊,兩位大神中的大神,我記得wps里有個公式roundbanke,就是四舍六入五留雙啊 ...


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)))))
73#
靜心養氣 發表于 2025-6-20 08:46:02 | 只看該作者
公式太長沒有應用的意義。除非特定的超高細度精確計算,一般情況ROUNDBANK足夠用,當然ROUNDBANK存在位數為0時不顯示0的問題,不夠優化,但可以通過設置數字位數來實現。
最終還是為了更普適的應用,不是為了秀特例的技巧。
74#
我要吃板面 發表于 2025-6-21 17:29:32 | 只看該作者
直接選擇保留小數位默認的應該是四舍五入吧  也沒人查這個
75#
步云風 發表于 2025-6-23 21:39:59 | 只看該作者

感謝分享,下載看看
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

GMT+8, 2025-7-15 16:27

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 99国产精品热久久久久久| 久久影院最新消息| 黄色网站免费在线观看| 麻豆回家视频区一区二| 日本成熟电影不卡www| 噜噜噜噜噜在线观看视频| eeuss在线兵区免费观看| 欧美日韩亚洲精品国产色| 国产福利一区二区三区在线观看| 日批视频在线免费看| 色yeye香蕉凹凸视频在线观看 | 久久6这里只有精品| 国产高清免费视频| 日日躁夜夜躁狠狠天天| 欧美精品亚洲精品日韩专区va | 欧美巨大xxxx做受孕妇视频| 一本一道dvd在线观看免费视频 | 日本红怡院在线| 欧美激情blackedraw红衣在线播放| 美女性生活电影| 日本按摩xxxxx高清| 99在线免费观看| 丰满人妻熟妇乱又伦精品视| 偷看农村妇女牲交| 国产成人欧美视频在线| 国产综合成色在线视频| 成人国产在线不卡视频| 人成免费在线视频| 欧美日韩高清性色生活片| 成人Av无码一区二区三区| 亚洲欧洲国产视频| 菠萝蜜视频在线观看入口| 夜来香高清在线观看| 久久精品国产亚洲av麻豆色欲 | 同城免费妇女寂寞| 91免费看国产| 无限资源日本免费2018| 亚洲狠狠狠一区二区三区| 视频久re精品在线观看| 天下第一社区视频welcome | 天天综合网色中文字幕|