c在浮点数中用逗号替换点

c在浮点数中用逗号替换点,c,floating-point,C,Floating Point,我正在开发一个简单的GTK+3程序,可以进行简单的计算。 我对浮点数有问题,因为如果我写的是而不是,总数将是错误的。 所以我有浮动价格

我正在开发一个简单的GTK+3程序,可以进行简单的计算。
我对浮点数有问题,因为如果我写的是
而不是
总数将是错误的。
所以我有
浮动价格
替换

示例:用户编写
100.60
作为价格,我想将其转换为
100,60
。我该怎么做?
我曾想
strchr
,但它是一个浮点数,我想我不能使用它xD
谢谢:)

编辑:添加代码

#include <gtk/gtk.h>
#include <stdlib.h>
#include <string.h>

GtkWidget *window;
GtkWidget *grid;
GtkWidget *c_button;
GtkWidget *q_button;
GtkWidget *u_name;
GtkWidget *h_name;
GtkWidget *pass;
GtkWidget *label_user;
GtkWidget *label_host;
GtkWidget *label_pass;

/* Funzione attivata alla pressione del pulsante connect */
int calcolo_guadagno(void){
    int num_btp, i, len;
    float prezzo_attuale, subtotale, totale, diff_prezzo_attuale, PREZZO_PARTENZA = 99.42;
    char cmcd[15];
    num_btp = (atoi(gtk_entry_get_text(GTK_ENTRY(h_name)))/PREZZO_PARTENZA);
    prezzo_attuale = atof(gtk_entry_get_text(GTK_ENTRY(u_name)));
    diff_prezzo_attuale = (prezzo_attuale - PREZZO_PARTENZA);
    subtotale = (num_btp * diff_prezzo_attuale);
    totale = subtotale-((subtotale/100)*12.5);
    if(prezzo_attuale < PREZZO_PARTENZA){
        strcpy(cmcd, "Sei in perdita...");
        gtk_entry_set_text(GTK_ENTRY(pass),cmcd);
        return EXIT_SUCCESS;
    }
    if(prezzo_attuale == PREZZO_PARTENZA){
        strcpy(cmcd, "Sei in pari...");
        gtk_entry_set_text(GTK_ENTRY(pass),cmcd);
        return EXIT_SUCCESS;
    }
    sprintf(cmcd, "%.3f", totale);
    gtk_entry_set_text(GTK_ENTRY(pass),cmcd);
    return EXIT_SUCCESS;
}



   int main (int argc, char *argv[]){

    /* Inizializziamo le librerie GTK+ */
    gtk_init (&argc, &argv);

    /* Creiamo la finestra principale, impostiamo il titolo, la posizione e la dimensione */
    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
    gtk_window_set_title (GTK_WINDOW (window), "Calcolo Guadagno BTP");
    gtk_window_set_position (GTK_WINDOW(window), GTK_WIN_POS_CENTER);
    gtk_window_set_default_size (GTK_WINDOW(window), 350, 250);

    /* Quando premiamo chiudi si 'disturgge' tutto */
    g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL);

    /* Impostiamo il bordo e dichiariamo le finestra ridimensionabile */
    gtk_container_set_border_width (GTK_CONTAINER (window), 10);
    gtk_window_set_resizable(GTK_WINDOW(window), TRUE);

    /* Creiamo una nuova griglia, la aggiungiamo alla finestra e impostiamo gli spazi fra i vari widget */
    grid = gtk_grid_new ();
    gtk_container_add (GTK_CONTAINER (window), grid);
    gtk_grid_set_row_spacing (GTK_GRID (grid), 3);

    /* Creiamo delle label con il relativo nome */
    label_user = gtk_label_new("Prezzo attuale ");
    label_host = gtk_label_new("Soldi investiti ");
    label_pass = gtk_label_new("Guadagno netto ");

    /* Creo una entry_text */
    h_name = gtk_entry_new();
    /* Impostiamo il testo trasparente che scompare quando clicco o scrivo */
    gtk_entry_set_placeholder_text (GTK_ENTRY (h_name), "Soldi investiti");
    u_name = gtk_entry_new();
    gtk_entry_set_placeholder_text (GTK_ENTRY (u_name), "Prezzo attuale");
    pass = gtk_entry_new();
    /* Impostiamo il campo password non visibile */
    gtk_editable_set_editable (GTK_EDITABLE (pass), 0);
    /* Creiamo i pulsanti e li connettiamo alle relative funzioni */
    c_button = gtk_button_new_with_label ("Calcola");
    g_signal_connect (c_button, "clicked", G_CALLBACK (calcolo_guadagno), NULL);
    q_button = gtk_button_new_with_label ("Esci");
    g_signal_connect (q_button, "clicked", G_CALLBACK (gtk_main_quit), NULL);

    /* Imposto i widget come espandibili sia in orizzontale che in verticale */
    gtk_widget_set_hexpand(u_name, TRUE);
    gtk_widget_set_vexpand(u_name, TRUE);
    gtk_widget_set_hexpand(h_name, TRUE);
    gtk_widget_set_vexpand(h_name, TRUE);
    gtk_widget_set_hexpand(pass, TRUE);
    gtk_widget_set_vexpand(pass, TRUE);

    /* Posizioniamo i widget all'interno della griglia */
    gtk_grid_attach (GTK_GRID (grid), label_host, 0, 0, 1, 1);
    gtk_grid_attach (GTK_GRID (grid), h_name, 1, 0, 1, 1);
    gtk_grid_attach (GTK_GRID (grid), label_user, 0, 1, 1, 1);
    gtk_grid_attach (GTK_GRID (grid), u_name, 1, 1, 2, 1);
    gtk_grid_attach (GTK_GRID (grid), label_pass, 0, 2, 1, 1);
    gtk_grid_attach (GTK_GRID (grid), pass, 1, 2, 1, 1);
    gtk_grid_attach (GTK_GRID (grid), c_button, 0, 3, 2, 1);
    gtk_grid_attach (GTK_GRID (grid), q_button, 0, 4, 2, 1);

    /* Mostriamo tutti i widget */
    gtk_widget_show_all (window);

    /* Entriamo nel loop principale delle GTK+, da questo punto  l'applicazione attende l'accadere di un qualsiasi evento */
    gtk_main ();

    return 0;
}
#包括
#包括
#包括
GtkWidget*窗口;
GtkWidget*网格;
GtkWidget*c_按钮;
GtkWidget*q_按钮;
GtkWidget*u_名称;
GtkWidget*h_名称;
GtkWidget*通行证;
GtkWidget*标签用户;
GtkWidget*标签_主机;
GtkWidget*标签和通行证;
/*脉冲电源连接装置*/
内部calcolo_guadagno(无效){
int num_btp,i,len;
浮动预调、小计、总计、差异预调、预调=99.42;
char-cmcd[15];
num_btp=(atoi(gtk_条目_获取文本(gtk_条目(h_名称)))/PREZZO_PARTENZA);
prezzo_attuale=atof(gtk_条目_获取文本(gtk_条目(u_名称)));
差异(prezzo_attuale=(prezzo_attuale-prezzo_PARTENZA);
小计=(数量/btp*差异/前置);
总计=小计-((小计/100)*12.5);
if(prezzo_attuale
inti;
int len=strlen(字符串);
对于(i=0;i
看一看

如果您使用的区域设置使用逗号作为分隔符,那么它将在输入/输出操作中使用

这就是您要找的吗?

中的函数可以提供帮助

void dot_to_comma(char *input) {
    char *ptr = NULL;
    while(ptr = strpbrk(input, ".")) { //find the first dot in input
        *ptr = ','; //replace the dot with a comma
    }
}

将价格作为浮动价格通常是一个非常糟糕的主意。浮点运算是不精确的,在非常奇怪的情况下,它会回来咬你。使用
struct
表示货币的两个部分,然后实现一些算法并使用它们进行打印

type struct {
  int main;
  int sub;
} money;

void add(money* result, money* x, money* y);

void print(money* x);
void read(money* result, const char* input);

打印函数可以明确指定应该使用的分隔符。

但是我有一个浮点而不是字符串!字符缓冲区[50];sprintf(缓冲区,%f,价格)@那么,浮点值从何而来?你说“user write
100.60
…”,这意味着有用户输入,这将是一个字符串。是一个
atof(gtk\u entry\u get\u text…)
PS:你的代码不工作
type struct {
  int main;
  int sub;
} money;

void add(money* result, money* x, money* y);

void print(money* x);
void read(money* result, const char* input);