我有nfloat
。现在我想只有两位小数,但不应该涉及舍入。如果应该四舍五入,则应向下舍入。
我试过这个
nfloat test = 45.71629f;
Console.WriteLine (test.ToString("F2"));
但在这里他结束了(结果:45.72)。它应该是45.71。我也试过这个扩展方法
// input: 45.71429
public static class MyMathExtension
{
public static nfloat Truncate(this nfloat value, int digits)
{
double mult = Math.Pow(10.0, digits);
double result = Math.Truncate( mult * value ) / mult;
return (nfloat) result;
}
}
输出为45.71429。我调查了它,似乎从double
到nfloat
的转换失败了。
如何截断nfloat
?
修改
相同的扩展方法适用于float
!将float
转换为nfloat
得到45.7142906188965。截断是不可能的?
答案 0 :(得分:1)
请记住,您不能将45.71
完全存储为nfloat(也不能浮动也不能加倍),因此您可以将浮点变量允许的截断为尽可能接近45.71
,然后使用标准格式化函数,它将舍入到两位小数,从而显示正确的结果:
nfloat a = 45.71629f;
var b = Math.Truncate (a*100);
var c = b / 100;
Console.WriteLine (c.ToString ("F2"));
将打印
45.71
答案 1 :(得分:0)
所有标准字符串格式化程序和截断函数都进行舍入。你必须把它串起来并切断结束
double x = 333345.71429f;
string s = x.ToString(CultureInfo.InvariantCulture);
string y = s;
if (s.Contains("."))
{
y = s.Substring(0, s.IndexOf(".")) + s.Substring(s.IndexOf("."), Math.Min(3, s.Length - s.IndexOf(".")));
}
else
{
y = s + ".00";
}
答案 2 :(得分:0)
几乎有扩展方法:
float a = 45.71629f;
var b = Math.Truncate(a*100);
Console.Write(b / 100);