ユーザーが指定した指定の精度にfloat値を丸めるために、Cプログラム(プロジェクトの一部)を作成しました。機能はこんな感じ
float round_offf (float num, int precision)
このプログラムで私が行ったことは、浮動小数点数を文字列に変換してから処理することです。
しかし、数値をfloat自体として保持し、同じように実装する方法はありますか。
例えば。num = 4.445 prec = 1 result = 4.4
ユーザーが指定した指定の精度にfloat値を丸めるために、Cプログラム(プロジェクトの一部)を作成しました。機能はこんな感じ
float round_offf (float num, int precision)
このプログラムで私が行ったことは、浮動小数点数を文字列に変換してから処理することです。
しかし、数値をfloat自体として保持し、同じように実装する方法はありますか。
例えば。num = 4.445 prec = 1 result = 4.4
もちろんあります。非常に簡単:
#include <math.h>
float custom_round(float num, int prec)
{
int trunc = round(num * pow(10, prec));
return (float)trunc / pow(10, prec);
}
編集:フォーマット文字列で動的な精度を得ることができないと思うので、これが必要なようです。どうやら、あなたはすることができます:
int precision = 3;
double pie = 3.14159265358979323648; // I'm hungry, I need a double pie
printf("Pi equals %.*lf\n", precision, pie);
これは印刷し3.142
ます。
はい:
float round_offf(float num, int precision)
{
int result;
int power;
power = pow(10, precision + 1);
result = num * power;
if ((result % 10) > 5)
result += 10;
result /= 10;
return ((float)result / (float)power);
}