System.Globalization.NumberFormatInfo停止舍入数字

时间:2015-07-05 20:10:04

标签: c# rounding

我正在使用System.Globalization.NumberFormatInfo类来使用以下代码格式化我的数字。

int decimalDigits = 4;
NumberFormatInfo format = new NumberFormatInfo();
format.CurrencyDecimalDigits = decimalDigits;
format.CurrencyDecimalSeparator = ".";
format.CurrencyGroupSeparator = ",";
format.CurrencySymbol = "";

string value = amount.ToString("C", format);

上面的代码格式数字很好,但我有一个舍入问题。

假设我输入了金额12345.12345,现在我想要的值是12,345.1234 但它返回12,345.1235

所以基本上我想停止四舍五入,我在互联网上搜索但找不到我想要的东西。

2 个答案:

答案 0 :(得分:2)

String.Format将在格式化时舍入浮点值,因此您需要在格式化值之前应用自己的“舍入规则”。我的理解是你要截断这个值。

使用Math.Round对值进行舍入时,可以指定精度。但是,使用Math.Truncate截断时,您没有这样的选项。相反,你必须乘以除以10的精度(在你的情况下为10000):

var factor = Math.Pow(10, decimalDigits);
var truncatedAmount = Math.Truncate(factor*amount)/factor;
string value = truncatedAmount.ToString("C", format);

这将产生所需的输出12.345.1234

答案 1 :(得分:0)

您的解决方案就在这里:

amount = Math.Floor(amount * Math.Pow(10, decimalDigits)) / Math.Pow(10, decimalDigits);

使用前

string value = amount.ToString("C", format);