Решил сделать простенькую программу, которая вычисляет из числа с плавающей запятой целую и дробную часть, но столкнулся с тем, что стандартные методы типа Convert.ToDouble или Double.TryParse на этапе компиляции вызывают исключения. Оказалось, что вся эта белиберда связана с тем, что в ОС Windows в настройках, разделителем целой и дробной части (см. рисунок ниже) выступает запятая, а я пихал числа с разделителем точка! Такие вещи прокатывали в Delphi, но не в C#.
Также оказалось довольно-таки проблематично вызвать метод одного класса из другого класса. Но как говорится, кто ищет — тот всегда найдёт!
Создаём проект
На форме помещаем три textBox и одну button.
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace WindowsFormsApplication42 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } public double f; public class MyClass { public static TextBox EditText1 = new TextBox(); public string StrText = EditText1.Text; public void CalculateIntAndDouble(Form1 form) { form.textBox2.Text = Convert.ToString(Math.Truncate(Convert.ToDouble(this.StrText))); form.textBox3.Text = Convert.ToString(form.f - Convert.ToInt32(form.textBox2.Text)); } } private void button1_Click(object sender, EventArgs e) { string text; f = 0; text = textBox1.Text; Char separator = System.Globalization.CultureInfo.CurrentCulture.NumberFormat.CurrencyDecimalSeparator[0]; String Source = text.Replace('.', separator); f = Convert.ToDouble(Source); MyClass.EditText1.Text = Convert.ToString(f); MyClass myClass2 = new MyClass(); myClass2.CalculateIntAndDouble(this); } } }
p.s. Или наоборот: System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo(«en-US»);
p.s.s. И не надо ничего реплейсить