LINUX.ORG.RU

gtk, text to number conversion


0

0

Что делаю не так?


void
on_button_calculate_clicked            (GtkButton       *button,
                                        gpointer         user_data)
{
	float x1, x2;
	float xsum;
	char *output;
	
	output = malloc (long double);
	x1 = atof (gtk_entry_get_text (GTK_ENTRY (glade_xml_get_widget (main_glade, "entry_x1"))));
	x2 = atof (gtk_entry_get_text (GTK_ENTRY (glade_xml_get_widget (main_glade, "entry_x2"))));

	printf ("%f %f\n", x1, x2);
	printf ("%s %s\n", gtk_entry_get_text (GTK_ENTRY (glade_xml_get_widget (main_glade, "entry_x1"))), gtk_entry_get_text (GTK_ENTRY (glade_xml_get_widget (main_glade, "entry_x2"))));

	xsum = x1 + x2;
	sprintf (output, "%f", xsum);
	gtk_label_set_text (GTK_LABEL (glade_xml_get_widget(main_glade, "label_x_sum")), output);
	free (output);
}

В результате, при вводе значений 0.5 и 0.6 соответственно получаю:
0.000000 0.000000
0.5 0.6
Что делаю неправильно в преобразовании?
★★★★★

Это к gtk отношения не имеет, наверное, а к локали. atof преобразует числа из текущей локали, поэтому ожидает строчки 0,5 и 0,6 вместо 0.5 и 0.6

Если хочешь . вместо , ставь локаль "C" или используй g_ascii_strtod

welkam ★★
()
Ответ на: комментарий от welkam

> Это к gtk отношения не имеет, наверное, а к локали
Я так и понял, просто не знал, как выкрутиться! (Учусь!)
> Если хочешь . вместо , ставь локаль "C"
Пробовал - segmetation fault
> или используй g_ascii_strtod
А за функцию спасибо!

UVV ★★★★★
() автор топика
Ответ на: комментарий от UVV

А ещё... и мана

ATOF(3)          Linux Programmer's Manual                      ATOF(3)

NAME
       atof - convert a string to a double

SYNOPSIS
       #include <stdlib.h>

       double atof(const char *nptr);
......


Всё же эта функция double возвращает, а не float =) так что всякое бывает...

Cy6erBr4in ★★★
()
Ответ на: комментарий от Cy6erBr4in

> Всё же эта функция double возвращает, а не float =) так что всякое бывает...
Пробовал и strtof - то же самое!

UVV ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.