在F#中将float转换为int

Lee*_*son 9 f#

可有人请解释为什么int (0.4 * 10.0)4int ((2.4 - 2.0) * 10.0)3

然后还请解释如何获得4.即我真的必须这样做int (System.Math.Round((2.4 - 2.0) * 10.0))吗?

对于应该如此简单的事情来说,这太丑了.

Ped*_*ues 12

2.4 - 2.0的双重表示是0.399999999999.将数字转换为int时,小数部分将被截断,因此3.999999999将截断为3.


Ale*_*nov 5

然后还请解释如何获得4.即我真的必须这样做

int(System.Math.Round((2.4 - 2.0)*10.0))

对于应该如此简单的事情来说,它真是太难看了.

当然不是,只需定义

let round x = int System.Math.Round(x)
Run Code Online (Sandbox Code Playgroud)


Ale*_*nov 5

实际上,在.Net中有一种decimal数据类型可以帮助您解决这个问题,如果您的数字可以精确地表示为小数部分.

2.4m - 2.0m == 0.4m
2.4 - 2.0   != 0.4
Run Code Online (Sandbox Code Playgroud)


kat*_*ash 5

float数字转换为int使用:

let i = Convert.ToInt32(f)

  • 给新用户(像我一样)的注意事项:首先需要“打开系统” (2认同)