如何在点后取6个数字 - 但没有取整数字?如何在点后取6个数字 - 但没有取整数字?
例如:
102.123456789 => 102.123456
9.99887766 => 9.998877
在C#的WinForms
thak的预先
如何在点后取6个数字 - 但没有取整数字?如何在点后取6个数字 - 但没有取整数字?
例如:
102.123456789 => 102.123456
9.99887766 => 9.998877
在C#的WinForms
thak的预先
System.Math.Truncate (102.123456789 * factor)/factor;
在你的情况的因素是10^6; read more
可以使用Math.Truncate
方法和10^6乘数:
decimal x = 102.12345689m;
decimal m = 1000000m;
decimal y = Math.Truncate(m * x)/m;
Console.WriteLine(y); // Prints 102.123456
截断为一个整数 - http://msdn.microsoft.com/en-us/library/c2eabd70.aspx “截取四舍五入到最接近零的整数。” – ChrisF 2010-08-12 12:20:37
@ChrisF的确,我更新了我的答案 – 2010-08-12 12:25:07
@Chris:代码有效。他使用10^6乘法器来解决这个问题 - 实际上相当优雅,比使用字符串更清洁! – 2010-08-12 12:27:24
我知道这使用字符串是丑陋的,但认为我把它无论如何:
double x = 9.9887766;
string[] xs = x.ToString().Split('.');
double result = double.Parse(xs[0] + "." + xs[1].Substring(0, Math.Min(xs[1].Length, 6)));
与我的解决方案类似,但您提供了实际的代码。如果你走这条路线,你可能想先检查一下xs [1]是不是第一个(调用子字符串会通过异常)。同样对于非空值,如果它包含少于6个字符会发生什么。 – 2010-08-12 12:24:47
@保罗 - 是的,在你回答之前,我抓住了第二部分。但是......这是一个非常粗糙的例子。如果OP希望总是检查'xs [1]'是否为空/不存在,那么他可以这样做。 – TheCloudlessSky 2010-08-12 12:27:42
可能是一个长篇大论方式,但如何把它变成一个字符串,定位小数点,然后抓住字符串减去小数点后第六位的任何东西。然后你可以把它变成小数。
它的原油,但怎么样:
decimal Number = 102.123456789;
string TruncateTarget = Number.ToString();
decimal FinalValue = Decimal.Parse(TruncateTarget.Substring(0, TruncateTarget.IndexOf('.') +6));
public decimal TruncateDecimal(decimal decimalToTruncate, uint numberOfDecimalPlacse)
{
decimal multiplication_factor = (decimal)Math.Pow(10.0, numberOfDecimalPlacse);
decimal truncated_value = (long)(multiplication_factor * decimalToTruncate);
return (truncated_value/multiplication_factor);
}
所以,你只是想在第六位小数“砍”数字而不是执行任何*舍入形式? – 2010-08-12 12:19:02
我会建议[Math.Round](http://msdn.microsoft.com/en-us/library/75ks3aby.aspx),但你说你想截断不舍入。 – ChrisF 2010-08-12 12:22:44
http://stackoverflow.com/questions/329957/truncate-decimal-number-not-round-off – w69rdy 2010-08-12 12:28:58