文本框的值想呈献给用户的是四舍五入、保留指定位小数,但实际数字不舍入

leon51 2021-04-26 11:30:07
一个文本框(textbox, winform),想呈献给用户的是四舍五入、保留指定位小数,但实际数字不舍入,应该怎么做?字符串格式化?谢谢
...全文
396 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
leon51 2021-05-22
  • 打赏
  • 举报
回复
冷静想了半天,终于找到了一个看起来不错的解决办法: 增加两个属性分别记录用户输入时的单位和值,当切换到与输入时单位一致时,直接从这两个属性中取值;当切换到与输入时单位不一致时才需要转换。
Hello World, 2021-05-03
  • 打赏
  • 举报
回复
单位换算一般会用一个中间单位,不管什么单位转换,先换成中间单位,再换到目标单位,这样在换算时会比较简单。 精度的问题,只保留用户输入时的数值和单位,在换算时一直使用这个数据来计算,直到用户再次输入时才更新。至于存在哪里就随意了。 从直观来讲,用显示的值来计算也是没有问题的,比如1500米,舍入成2公里,再换成米,又弄个1500米出来,反倒让人感觉不对劲了。
leon51 2021-05-03
  • 打赏
  • 举报
回复
引用 3 楼 一个低调的码农 的回复:
重写tostring方法.
引用 4 楼 手在键盘敲很轻 的回复:
你说的呈献怎么理解呢?是将数字从某个数据源取出来给控件赋值还是用户自己输入后然后通过某个事件将其输入的值转换成你说的四舍五入?
引用 5 楼 Bridge_go 的回复:
可以用数据绑定,可以格式化数据
            
       A a = new A { Num = 6.354 };
       this.textBox1.DataBindings.Add("Text", a, "Num", true, DataSourceUpdateMode.OnValidation, "0", "F2");
        
        class A
        {
            public double Num { get; set; }
        }
引用 6 楼 hui1202 的回复:
不管你效率什么的,按道理这个最通俗易懂
public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            textBox1.Text = "1.1";
            textBox1.Tag = "1.1111";
        }

        private void button2_Click(object sender, EventArgs e)
        {
            MessageBox.Show(textBox1.Text);
        }

        private void button3_Click(object sender, EventArgs e)
        {
            MessageBox.Show(textBox1.Tag.ToString());
        }
引用 9 楼 Six-Classics-note-Me 的回复:
//textBox1.Text 原来的数据和格式化完成的数据 //textBox2.Text 要保留的小数位数 textBox1.Text = Calc_cust(textBox1.Text, Convert.ToInt16(textBox2.Text)); public string Calc_cust(string str,int bits) { try { int index = str.IndexOf("."); return str.Substring(0, index + bits + 1); } catch { return str; } }
我要做的实际是一个单位切换的(在公英制之间切换)功能 我见过一个软件:无论怎样反复的切换(使用快捷键Ctrl+U)多少次,精度都不会丢失,而且当切换回与输入时的单位相同时,无论多少位小数,始终是你输入的值。 精度的问题我已找到解决办法,就是在代码中单向转换,将英制的值放在Tag属性中,只从英制到公制进行转换,从公制到英制时直接取Tag属性中的值。 后一点,因为对数据进行了四舍五入,所以切换时只是有一点点差异。这个如何处理?
leon51 2021-04-27
  • 打赏
  • 举报
回复
引用 3 楼 一个低调的码农 的回复:
重写tostring方法.
感觉你的回复可行,问题是用的是Text属性,不是ToString()方法
hui1202 2021-04-27
  • 打赏
  • 举报
回复
不管你效率什么的,按道理这个最通俗易懂
public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            textBox1.Text = "1.1";
            textBox1.Tag = "1.1111";
        }

        private void button2_Click(object sender, EventArgs e)
        {
            MessageBox.Show(textBox1.Text);
        }

        private void button3_Click(object sender, EventArgs e)
        {
            MessageBox.Show(textBox1.Tag.ToString());
        }
Bridge_go 2021-04-27
  • 打赏
  • 举报
回复
可以用数据绑定,可以格式化数据
            
       A a = new A { Num = 6.354 };
       this.textBox1.DataBindings.Add("Text", a, "Num", true, DataSourceUpdateMode.OnValidation, "0", "F2");
        
        class A
        {
            public double Num { get; set; }
        }
  • 打赏
  • 举报
回复
你说的呈献怎么理解呢?是将数字从某个数据源取出来给控件赋值还是用户自己输入后然后通过某个事件将其输入的值转换成你说的四舍五入?
  • 打赏
  • 举报
回复
重写tostring方法.
leon51 2021-04-27
  • 打赏
  • 举报
回复
引用 1 楼 yueshg3 的回复:
textboxok.text=math.round(数字,保留位数).tostring()
没有看懂我的需求:实际数字不舍入。难道要用另外一个属性保存?
yueshg3 2021-04-27
  • 打赏
  • 举报
回复
textboxok.text=math.round(数字,保留位数).tostring()
six2me 2021-04-27
  • 打赏
  • 举报
回复
//textBox1.Text 原来的数据和格式化完成的数据 //textBox2.Text 要保留的小数位数 textBox1.Text = Calc_cust(textBox1.Text, Convert.ToInt16(textBox2.Text)); public string Calc_cust(string str,int bits) { try { int index = str.IndexOf("."); return str.Substring(0, index + bits + 1); } catch { return str; } }

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧