假设我有 0.128 或 0.008。分数无法用二进制定点表示,所以我不知道如何找出尾数以便将其转换为浮点。
假设我有 int 100,浮点二进制字符串将是: 01000010110010000000000000000000。 我想对 0.128 做同样的事情,但我不知道如何舍入分数,因为我需要这个作为尾数。
最佳答案
要将十进制数的小数部分转换为二进制,您可以将小数部分连续乘以 2。每个乘积将在整数部分产生 0 或 1,这将是二进制表示形式的每个数字(在从左到右排列)。
您可以继续相乘,直到小数部分为 0,或者直到获得所需的位数(然后截断或舍入)。
请注意,只有作为 2 的负幂之和的小数才会有精确的表示。您会发现具有几位数字的十进制数以 2 为基数是周期性的。
从您的示例中,0.008 的二进制表示形式将以 0.00000010 开头...
0.008 x 2 = 0.016 First fractional digit is 0
0.016 x 2 = 0.032
0.032 x 2 = 0.064
0.064 x 2 = 0.128
0.128 x 2 = 0.256
0.256 x 2 = 0.512
0.512 x 2 = 1.024 First one
0.024 x 2 = 0.048
...
请注意,以 2 为基数乘以 2 相当于向左移动,或者将点向右移动一位数,从而将第一个小数位移至整数部分。
关于floating-point - 如何将分数转换为 float ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22205607/