Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.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# c中单值(浮点数)乘法的意外结果#_C#_Floating Point_Integer_Expression - Fatal编程技术网

C# c中单值(浮点数)乘法的意外结果#

C# c中单值(浮点数)乘法的意外结果#,c#,floating-point,integer,expression,C#,Floating Point,Integer,Expression,我知道这可能是一个愚蠢的错误,但我不明白为什么上面表达式的结果是8。我想应该是9点,原因很明显。它们在c语言中有什么特别的东西,我没有注意到吗?这与浮点数的计算和二进制存储方式有关。如果你做了If((3/10-2/10)=1/10)你实际上会得到false,因为计算机得到的值是3.0000000001 这是因为1/10不能作为十进制二进制写入。它类似于0.0011,其中0011位永远重复 这类似于在我们的数字系统中,1/3不能作为小数点重排。我们通常做0.33333333 4。这会引起很多奇怪和

我知道这可能是一个愚蠢的错误,但我不明白为什么上面表达式的结果是8。我想应该是9点,原因很明显。它们在c语言中有什么特别的东西,我没有注意到吗?

这与浮点数的计算和二进制存储方式有关。如果你做了
If((3/10-2/10)=1/10)
你实际上会得到
false
,因为计算机得到的值是
3.0000000001

这是因为
1/10
不能作为十进制二进制写入。它类似于
0.0011
,其中
0011
位永远重复

这类似于在我们的数字系统中,
1/3
不能作为小数点重排。我们通常做
0.33333333 4
。这会引起很多奇怪和恼人的问题


如果您想要更精确的数字,请使用
十进制
。十进制数字实际上是以10为基数存储的,而不是以2为基数,所以这种事情不会发生。但是请注意,这些速度较慢

这与浮点数的计算和二进制存储方式有关。如果你做了
If((3/10-2/10)=1/10)
你实际上会得到
false
,因为计算机得到的值是
3.0000000001

这是因为
1/10
不能作为十进制二进制写入。它类似于
0.0011
,其中
0011
位永远重复

这类似于在我们的数字系统中,
1/3
不能作为小数点重排。我们通常做
0.33333333 4
。这会引起很多奇怪和恼人的问题


如果您想要更精确的数字,请使用
十进制
。十进制数字实际上是以10为基数存储的,而不是以2为基数,所以这种事情不会发生。但是请注意,这些速度较慢

欢迎使用浮点数。开心地把你的头发扯下来:这会帮助你更好地理解。使用
Single
float
)只能得到近似值(因为该值存储为二进制点类型)。您可能需要更改为十进制(
Decimal
)(存储为小数点类型)欢迎使用浮点数。开心地把你的头发扯下来:这会帮助你更好地理解。使用
Single
float
)只能得到近似值(因为该值存储为二进制点类型)。您可能希望更改为
Decimal
Decimal
)(存储为小数点类型)
Single singleVal = 0.9f;
int u = (int)(singleVal * 10.0f); # u = 8