Edw*_*uay 9 c# numerical types
下面for循环的所有除法方程的结果是0.我怎么能得到它给我一个十进制,例如:
297 / 315 = 0.30793650793650793650793650793651
Run Code Online (Sandbox Code Playgroud)
码:
using System;
namespace TestDivide
{
class Program
{
static void Main(string[] args)
{
for (int i = 0; i <= 100; i++)
{
decimal result = i / 100;
long result2 = i / 100;
double result3 = i / 100;
float result4 = i / 100;
Console.WriteLine("{0}/{1}={2} ({3},{4},{5}, {6})", i, 100, i / 100, result, result2, result3, result4);
}
Console.ReadLine();
}
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢Jon和大家,这就是我想要做的:
using System;
namespace TestDivide
{
class Program
{
static void Main(string[] args)
{
int maximum = 300;
for (int i = 0; i <= maximum; i++)
{
float percentage = (i / (float)maximum) * 100f;
Console.WriteLine("on #{0}, {1:#}% finished.", i, percentage);
}
Console.ReadLine();
}
}
}
Run Code Online (Sandbox Code Playgroud)
Jon*_*eet 30
您正在使用int/int,即使您指定了decimal/double/float变量,它也可以使用整数算术执行所有操作.
强制其中一个操作数属于您要用于算术的类型.
for (int i = 0; i <= 100; i++)
{
decimal result = i / 100m;
long result2 = i / 100;
double result3 = i / 100d;
float result4 = i / 100f;
Console.WriteLine("{0}/{1}={2} ({3},{4},{5}, {6})",
i, 100, i / 100d, result, result2, result3, result4);
}
Run Code Online (Sandbox Code Playgroud)
结果:
0/100=0 (0,0,0, 0)
1/100=0.01 (0.01,0,0.01, 0.01)
2/100=0.02 (0.02,0,0.02, 0.02)
3/100=0.03 (0.03,0,0.03, 0.03)
4/100=0.04 (0.04,0,0.04, 0.04)
5/100=0.05 (0.05,0,0.05, 0.05)
Run Code Online (Sandbox Code Playgroud)
(等等)
请注意,这并未显示float或double所表示的确切值 - 例如,您无法将0.01精确地表示为float或double.字符串格式化有效地舍入结果.有关更多信息,请参阅我关于.NET浮动二进制点的文章,以及一个可以让您查看double 的确切值的类.
我没有打扰使用100L result2因为结果总是相同的.
因为i是int:i / 100执行整数除法,然后将结果(始终为0)转换为目标类型.您需要在表达式中指定至少一个非int文字:
i / 100.0
Run Code Online (Sandbox Code Playgroud)