gpt4 book ai didi

c - 如何将随机生成的 float 截断为小数点后 6 位?

转载 作者:行者123 更新时间:2023-11-30 19:12:03 25 4
gpt4 key购买 nike

我想知道如何用C语言生成精确到最大6位小数且在(-999到+999)范围内的随机 float 字

我尝试过:

unsigned int i, num;
int divide;
FILE *f;

f=fopen("/dev/urandom", "r");
if (!f) {
fprintf(stderr, "Failed open file\n");
exit(1);
}
for(i=0; i< w*w; i++)
{
fread(&num, sizeof(unsigned int), 1, f);
fread(&divide, sizeof(int), 1, f);
h[i] = ((float)num)/((float)divide);

}
fclose(f);

但这给出了超过 6 位小数。

有没有办法获得 float 。例如。 34.123456000000000000000,即小数点后第六位之后的其余值应被截断。

@sas @Havenard @Lundin 标记为重复的问题仍然不能解决问题。代码:

    #include <stdio.h>
#include <stdlib.h>
#include<math.h>
void fill(float* h, int w)
{
unsigned int i, num;
int divide;
FILE *f;

f=fopen("/dev/urandom", "r");
if (!f)
{
fprintf(stderr, "Failed open file\n");
exit(1);
}
for(i=0; i< w*w; i++)
{
fread(&num, sizeof(unsigned int), 1, f);
fread(&divide, sizeof(int), 1, f);
h[i] = ((float)num)/((float)divide);
h[i] = trunc(100*h[i])/100; // trial for 2 place decimal
}
fclose(f);
}

void getrand(int n )
{
const int mybatch = 1;
float mat1_size = sizeof(float) * n * n;
float* mat1 = (float*) malloc(mat1_size);
fill(mat1, n);
for(int i=0; i<n; i++)
{
for(int j=0; j<n; j++)
{
fprintf(stdout,"%12.10f ",mat1[i*n+j]);

}
fprintf(stdout,"\n");
}

fprintf(stdout,"\n\n");
}
int main(int argc, char *argv[])
{
if(argc!=2)
{
printf("Usage: %s <matrix_width>\n", argv[0]);
return 0;
}

int w;
w = atoi( argv[1] );

getrand(w);
return 0;
}

这仍然打印:

$ ./a.out 5

-2.2799999714 3.5999999046 15.5200004578 -0.9900000095 -1.3099999428
-1.8799999952 1.4700000286 2.0499999523 0.4900000095 2.0499999523
0.9599999785 -0.4199999869 -0.4499999881 4.3200001717 -0.7699999809
-2.9300000668 2.5099999905 -1.5900000334 -0.4199999869 -0.6800000072
-0.2300000042 -1.7599999905 3.1800000668 0.6000000238 0.6000000238

最佳答案

您可以尝试使用trunc函数。

也许你正在寻找这样的东西。只是例子。

float a = 34.123456000000000000000;
a = trunc(1000000*a)/1000000;
printf("%f\n", a);// output = 34.123455

注意 - 请将 math.h header 也包含在您的程序中

How to truncate a floating point number after a certain number of decimal places (no rounding)? 可能重复

关于c - 如何将随机生成的 float 截断为小数点后 6 位?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37983686/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com