有效數(shù)字的概念
有效數(shù)字是指在分析工作中實(shí)際能夠測(cè)量到的數(shù)字。能夠測(cè)量到的是包括最后一位估計(jì)的,不確定的數(shù)字。 我們把通過(guò)直讀獲得的準(zhǔn)確數(shù)字叫做可靠數(shù)字;把通過(guò)估讀得到的那部分?jǐn)?shù)字叫做存疑數(shù)字。把測(cè)量結(jié)果中能夠反映被測(cè)量大小的帶有一位存疑數(shù)字的全部數(shù)字叫有效數(shù)字。測(cè)得物體的長(zhǎng)度5.15cm。數(shù)據(jù)記錄時(shí),我們記錄的數(shù)據(jù)和實(shí)驗(yàn)結(jié)果真值一致的數(shù)據(jù)位便是有效數(shù)字。
另外在數(shù)學(xué)中,有效數(shù)字是指在一個(gè)數(shù)中,從該數(shù)的第一個(gè)非零數(shù)字起,直到末尾數(shù)字止的數(shù)字稱(chēng)為有效數(shù)字,如0.618的有效數(shù)字有三個(gè),分別是6,1,8。
有效數(shù)字是在整個(gè)計(jì)算過(guò)程中大致維持重要性的近似規(guī)則。 更復(fù)雜的科學(xué)規(guī)則被稱(chēng)為不確定性的傳播。
數(shù)字往往是四舍五入,以避免報(bào)告微不足道的數(shù)字。 例如,如果秤僅測(cè)量到最接近的克,讀數(shù)為12.345公斤(有五個(gè)有效數(shù)字),則會(huì)產(chǎn)生12.34500公斤(有七個(gè)有效數(shù)字)的測(cè)量誤差。 數(shù)字也可以簡(jiǎn)單化,而不是指示給定的測(cè)量精度,例如,使它們?cè)谛侣剰V播中更快地發(fā)音。
更詳細(xì)的介紹可以查看下面點(diǎn)擊下面鏈接查看:
有效數(shù)字_百度百科 (baidu.com)
C# 保留有效數(shù)字的方法
可以使用ToString(“G”)方法,指定相關(guān)格式可以是G1、G2...Gn。
例如:
double d = 1.03682; d.ToString("G3"); // 1.04
double d = 1.03682; d.ToString("G4"); // 1.037
double d = 0.03682; d.ToString("G3"); // 0.0368
double d = 0.03682; d.ToString("G4"); // 0.03682
以上的數(shù)字轉(zhuǎn)換是完全OK的,另一種情況:
double d = 1.04; d.ToString("G4"); // 1.04 應(yīng)該是1.040
double d = 0.04; d.ToString("G4"); // 0.04 應(yīng)該是0.04000
這兩種情況應(yīng)該自動(dòng)補(bǔ)0,但C#好像并不支持,我也沒(méi)找到相關(guān)的方法,所有自己重新改造了下。具體方法如下:
public static string ReturnBef(double bef, int digit)
{
var res = bef.ToString($"G{digit}");
if (res.Contains("."))
{
var index = Regex.Match(res, "([1-9])").Index;
var sub = res.Substring(index).Replace(".", "");
var leg = sub.Length;
while (leg < digit)
{
res += "0";
leg++;
}
}
else
{
var leg = res.Length;
res += ".";
while (leg < digit)
{
res += "0";
leg++;
}
}
return res;
}
測(cè)試:
ReturnBef(1.03682, 3); // 1.04
ReturnBef(1.03682, 4); // 1.037
ReturnBef(0.03682, 3); // 0.0368
ReturnBef(0.03682, 4); // 0.03682
ReturnBef(1.04, 4); // 1.040
ReturnBef(0.04, 4); // 0.04000
各位大佬如果有更簡(jiǎn)便的方法,可以交流交流~