0

私はオペレーティングシステムのプログラミングについて学んでおり、リソースがほとんどないと想定する必要があります。

次に、たとえば、2/3を計算して、小数点以下2桁に切り捨てる方法を教えてください。使用できる数学アルゴリズムやビット操作のトリックはありますか?

4

5 に答える 5

5

浮動小数点数を基数102桁または基数10桁に丸めることはできません。浮動小数点数は、単なる概算です。小数点以下の桁数が有限の2進数として正確に表すことができない10進数の数がたくさんあります。これは、10進数の1/3の数を有限数で表すことができないのとまったく同じ理由です。小数位。フロートを近似値として扱い、次に表示の一部としてのみ丸める必要があります。または、近似が必要ない場合は、整数を使用して1/100を表し、100で割って表示する値を取得するなどの操作を行います。

于 2012-10-20T06:12:06.283 に答える
1

変数を操作しない(印刷するだけ)場合は、次を使用することもできます。

printf("%.2f\n", 2.f / 3);
于 2012-10-20T05:24:42.110 に答える
0

小数点以下第2位に四捨五入:100を掛け、整数に変換し、100.0で割ります(ただし、一般に、浮動小数点数は、そのネイティブ表現では、小数点以下2桁であるとは言えません。これらは、ネイティブ表現では整数である必要はありません。)

そのため、実際には、100を掛けて、これが100分の1単位を表すことを理解した上で整数として格納する方が、「小数点以下2桁まで正確な数値」を表すより正確な方法であると主張します。

于 2012-10-20T05:13:58.570 に答える
0
// this is an old trick from BASIC
// multiply by 100.0 and add 0.5  (the 0.5 is for the rounding)
// normally you want to round rather than truncate for a more accurate result
// take the integer value of this to get rid of additional decimal places
// then divide by 100.0 to get the original number back only rounded
// of course you need to use floating point

#include <stdio.h>
#include <stdlib.h>

int main()
{
    double a=1.0, b=2.0, c=3.0;
    a = (int)((b/c)*100.0+0.5)/100.0;
    printf("%f\n",a);      // print all digits of a
    printf("%10.2f\n",a);  // print only 2 decimal points of a
    return 0;
}
于 2012-10-20T06:05:51.137 に答える
-1

私の戦略の1つは、浮動小数点数(2/3など)に(10 ^精度)を掛け、intにキャストして切り捨てることです。

于 2012-10-20T05:14:37.273 に答える