我正在使用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
。
所以基本上我想停止四舍五入,我在互联网上搜索但找不到我想要的东西。
答案 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);