C#Int和math没有返回完整的值

时间:2010-04-07 17:52:37

标签: c#

Int64 c1 = Convert.ToInt64(csvdeep[1]);
Int64 division = 1024;
string results = Math.Abs(c1 / division / division / division).ToString();

我的c110201841664results"9"

我宁愿得到小数点后两位,所以我的实际结果是9.50。关于如何获得2位小数的任何提示?

4 个答案:

答案 0 :(得分:12)

这是.NET中整数除法的结果 - 当划分两个整数时,你总是得到一个整数。

您需要至少有一个操作数是浮点类型(float,double,decimal),以使结果成为浮点。

Int64 c1 = Convert.ToInt64(csvdeep[1]);
double division = 1024.0m;
string results = Math.Abs(c1 / division / division / division).ToString();

结果可能会有比您想要的更多的小数位,因此您需要在ToString的调用中使用格式字符串:

string results = Math.Abs(c1 / division / division / division).ToString("0.00");

答案 1 :(得分:2)

你可以尝试:

string results = Math.Abs(((double)c1)/division/division/division)
    .ToString("0.00");

通过将第一个值(c1)转换为浮点值而不是整数,您也可以强制除法的结果成为浮点数。

然后会强制使用Math.Abs(double)而不是Math.Abs(long)

答案 2 :(得分:1)

尝试

Int64 c1 = 10201841664;
Int64 division = 1024;
string results = Math.Abs((decimal)c1/division/division/division).ToString("0.00"); 

你甚至可以去

Int64 c1 = 10201841664;
Int64 division = 1024;
string results = Math.Abs((double)c1 / Math.Pow((double)division, 3)).ToString("0.00"); 

答案 3 :(得分:0)

您在这里使用整数除法。这就是为什么它没有显示任何小数位。