C# System.Globalization.NumberFormatInfo停止舍入数
我正在使用System.Globalization.NumberFormatInfo类使用以下代码格式化我的数字C# System.Globalization.NumberFormatInfo停止舍入数,c#,rounding,C#,Rounding,我正在使用System.Globalization.NumberFormatInfo类使用以下代码格式化我的数字 int decimalDigits = 4; NumberFormatInfo format = new NumberFormatInfo(); format.CurrencyDecimalDigits = decimalDigits; format.CurrencyDecimalSeparator = "."; format.CurrencyGroupSeparator = ","
int decimalDigits = 4;
NumberFormatInfo format = new NumberFormatInfo();
format.CurrencyDecimalDigits = decimalDigits;
format.CurrencyDecimalSeparator = ".";
format.CurrencyGroupSeparator = ",";
format.CurrencySymbol = "";
string value = amount.ToString("C", format);
上面的代码格式的数字很好,但我有一个四舍五入的问题
假设我输入了金额12345.12345,现在我想要的值是12345.1234
但它返回12345.1235
因此,基本上我想停止舍入,我在Internet上搜索过,但找不到我要查找的内容。String.Format将在格式化时对浮点值进行舍入,因此在格式化值之前,您需要应用自己的舍入规则。我的理解是,您希望截断该值
使用Math.Round对值进行舍入时,可以指定精度。但是,当使用Math.Truncate进行截断时,您没有这样的选项。相反,在10000的情况下,你必须乘以并除以10的精度幂:
var factor = Math.Pow(10, decimalDigits);
var truncatedAmount = Math.Truncate(factor*amount)/factor;
string value = truncatedAmount.ToString("C", format);
这将产生所需的输出12.345.1234。您的解决方案如下:
amount = Math.Floor(amount * Math.Pow(10, decimalDigits)) / Math.Pow(10, decimalDigits);
使用前
string value = amount.ToString("C", format);