[英]Limiting double to 3 decimal places
這就是我想要實現的目標:
如果double有超過3個小數位,我想截斷第三個以上的任何小數位。 (不要圓。)
Eg.: 12.878999 -> 12.878
如果double小於3位小數,則保持不變
Eg.: 125 -> 125
89.24 -> 89.24
我遇到了這個命令:
double example = 12.34567;
double output = Math.Round(example, 3);
但我不想圓。 根據上面發布的命令, 12.34567 -> 12.346
我想截斷該值,使其變為: 12.345
雙打沒有小數位 - 它們不是以十進制數字開頭的。 當截斷為三位小數時,你可以得到“與當前值最接近的兩倍”,但它仍然不會完全相同。 你最好使用decimal
。
話雖如此,如果只是圓角發生的方式是一個問題,你可以使用Math.Truncate(value * 1000) / 1000;
這可能會做你想要的。 (你根本不需要四舍五入的聲音。)盡管如此,它仍然可能是“狡猾的”,因為結果仍然不會真正只有三個小數位。 但是,如果您使用小數值執行相同的操作,則可以使用:
decimal m = 12.878999m;
m = Math.Truncate(m * 1000m) / 1000m;
Console.WriteLine(m); // 12.878
編輯:正如LBushkin指出的那樣,你應該明確截斷顯示的目的(通常可以在格式說明符中完成)和截斷以進行進一步的計算(在這種情況下,上面應該有效)。
我無法想到在顯示目的之外明確失去精度的原因。 在這種情況下,只需使用字符串格式。
double example = 12.34567;
Console.Out.WriteLine(example.ToString("#.000"));
double example = 3.1416789645;
double output = Convert.ToDouble(example.ToString("N3"));
乘以1000然后使用截斷然后除以1000。
如果截斷數字的目的是出於顯示原因,那么只需在將double轉換為字符串時使用適當的格式。
String.Format()
和Console.WriteLine()
等方法允許您限制格式化值的精度位數。
不建議嘗試“截斷”浮點數 - 在許多情況下,浮點數不具有精確的十進制表示。 應用一種方法,比如縮放數字,截斷它,然后將其縮小,可以很容易地將值更改為與“截斷”值的預期完全不同的值。
如果你需要一個數字的精確十進制表示,你應該使用decimal
而不是double
或float
。
您可以使用:
double example = 12.34567;
double output = ( (double) ( (int) (example * 1000.0) ) ) / 1000.0 ;
在C lang:
double truncKeepDecimalPlaces(double value, int numDecimals)
{
int x = pow(10, numDecimals);
return (double)trunc(value * x) / x;
}
上面的好答案 - 如果你正在尋找可重復使用的東西,那就是代碼。 請注意,您可能需要檢查小數位數值,這可能會溢出。
public static decimal TruncateToDecimalPlace(this decimal numberToTruncate, int decimalPlaces)
{
decimal power = (decimal)(Math.Pow(10.0, (double)decimalPlaces));
return Math.Truncate((power * numberToTruncate)) / power;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.