有没有一种简单的方法来交换格式化数字的符号?

Posted

技术标签:

【中文标题】有没有一种简单的方法来交换格式化数字的符号?【英文标题】:Is there an easy way to swap the sign of a formatted number? 【发布时间】:2016-07-08 13:18:14 【问题描述】:

我完全接受这可能是不可能的,但似乎值得提出一个问题,看看是否有人有一个简单的答案。

我有一个用户定义格式为 Cn 或 Fn 的字段。用户还希望能够选择性地交换值上的符号(例如,-123.4 将显示为 £123.40)。有没有使用标准格式的简单方法?我找不到任何东西表明这是可能的,我必须生成某种形式的用户定义字符串来代替它们(这是可能的,但由于各种原因有问题)。

原因是出于会计目的,其中数据的存储方式与最容易解释的方式相反。我们无法更改原始数据,并且在格式化之前更改 hte 数据也不简单。

【问题讨论】:

您想从正面换成负面,反之亦然,还是总是正面? 格式化数字是什么意思? 负对正和正对负。我的意思是使用格式定义显示数字。 为什么不能使用decimal swappedVal = -1*val;?什么是格式化数字? 因为如果可能的话,我想使用一种格式来做到这一点。它是一个网格显示,用户需要能够即时更改它。我无法轻松访问原始数据。 我仍然不明白用户如何更改它以及为什么不能这样做。 【参考方案1】:

用户点击一列(有点)并说交换符号。那时 点,我无权访问数据,因为它已经 在网格中格式化

你不能用这种方法吗?

private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)

    var cell = dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex];
    if(cell.Value == null) return;

    // say this is for example: £123.40
    var ukCulture = new System.Globalization.CultureInfo("en-GB");
    decimal value;
    if (decimal.TryParse(cell.Value.ToString(), NumberStyles.Any, ukCulture, out value))
    
        cell.Value = (-1*value).ToString("C", ukCulture);
    

每次用户点击此单元格时,值的符号都会交换。

【讨论】:

以上是关于有没有一种简单的方法来交换格式化数字的符号?的主要内容,如果未能解决你的问题,请参考以下文章

具有另一种数字格式的货币符号

自定义数字格式字符串始终显示符号

有没有一种简单的方法来更改 Django 表单的日期时间输入字段的格式?

在Java中格式化带有小数位的数字符号而不进行除法的正确方法

有没有一种简单的方法可以在 C# 中创建序数?

获取货币符号角度 2