Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# System.Globalization.NumberFormatInfo停止舍入数_C#_Rounding - Fatal编程技术网

C# 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 = ","

我正在使用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,现在我想要的值是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);