【问题标题】:Convert a float to a percentage with strange sql formatting使用奇怪的 sql 格式将浮点数转换为百分比
【发布时间】:2013-01-20 20:36:02
【问题描述】:

我有一个 SQL 表,其中有一列的数据类型为 Float。有一个外部应用程序将百分比值写入此列,我读取它们并将它们显示在 Web 应用程序中。

我了解如何将小数转换为百分比;通常我会乘以 100,但这有点不同。

数据库中的值如下所示:

 0.95  <-- DB  5%  <-- UI
 0.85  <-- DB  15% <-- UI
 0.5   <-- DB  50% <-- UI

我试过了

number * percentage / 100

((percentage /100) * value).ToString();

 string percentage = string.Format("Percentage is {0:0.0%}", value);

 percentage/100m*value

 myDecimal.ToString("0.00");

最后,我认为很接近:

Math.Round(myDecimal, 2).ToString("{0.00}");

当然还有各种字符串格式化的东西,比如

 MyDecimal.ToString("P"), .ToString("P1"), etc)

关于在 C# 中格式化、舍入和转换百分比的文章:

Convert percentage to nearest fraction, Working percentage in c#, http://www.dotnetperls.com/percentage,

但我无法终生找到数学计算或内置 c# 转换来给我所需的输出。

似乎我需要做的是让 0.96 位数字减去某个数字,然后再乘以 100,但 0.5 是 50% 总是让我的数学题无法计算......

这似乎是一种常见的转换;我在这里缺少什么?

更新

这是我最终得到的解决方案,效果很好! (感谢里德)

            var li = new List<Object>();
        var retVal = new List<string>();

        li.Add(.5);       // 50%
        li.Add(.95);      // 95%
        li.Add(.85);      // 85%
        li.Add(0.87813);  // 12.18700%

        foreach (var o in li)
        {
            var value = Convert.ToDouble(o);
            string percentage = string.Format("Percentage is {0:0.0%}", 1.0 - value);

            retVal.Add(percentage);
        }

链接

为了完整起见,这里有一个关于小数、百分比、双精度和 C# 转换的非常简洁的资源列表:

A+

Working percentage in c#
Format decimal for percentage values?
Convert percentage to nearest fraction
http://www.dotnetperls.com/percentage
.NET: Decimal to rounded string
C# Is there a built-in function to convert a formatted String back to a Number?

A-

Format decimal as a percent with specific decimal places
Convert decimal to percent or shift decimal places. How
How to convert percentage string to double?

B+

two ways of displaying a decimal
http://msdn.microsoft.com/en-us/library/dwhawy9k.aspx

【问题讨论】:

  • 1 - 0.95 = 0.05 然后0.05 * 100 = 5 然后格式化为字符串并将% 放在末尾​​span>

标签: c# type-conversion decimal percentage


【解决方案1】:

从您的百分比中减去一 (1),然后乘以 100。1-.5 = .5 = 50%。 1-.95 = .05 = 5%

【讨论】:

  • 谢谢 Beth - 你的数学是正确的,但 @Reed 打败了你(并提供了一个很棒的代码示例)。 +1 的努力。
【解决方案2】:

试试:

(1 - currentPercentage) * 100

例子:

(1 - 0.95) * 100 = 0.05 * 100 = 5 [%]

格式:

string.Format("Percentage is {0}%", (1.0 - value) * 100);

或者@Reed 推荐的最好的一个

【讨论】:

  • 为什么要乘* 100? .NET 中的字符串格式会为您正确处理百分比值...
  • 为什么不呢?我最初是从数学的角度来看待它,而忘记了 .NET 的格式化潜力 :-)。总之是对的。
  • 我投了你一票 - 只是想指出你不需要在 .NET 中这样做,尤其是在最终目标只是格式化的情况下。 (如果你不这样做,它也会更好地本地化)
【解决方案3】:

我相信你会想要:

string percentage = string.Format("Percentage is {0:0.0%}", 1.0 - value);

如果你只想要数字:

string percentage = (1.0 - value).ToString("P");

或者,没有小数精度的数字:

string percentage = (1.0 - value).ToString("P0");

【讨论】:

  • 感谢您的快速回复里德;我想我读过的数学文章有一半是你回答的!我现在就试试这个解决方案。
  • 科普西先生,您是开发者中的神。这非常有效!再次感谢您的回答 - 我已经用我的测试代码更新了我的问题,证明这确实可以完美运行。
  • 一个额外的问题 - 我们将如何修改此代码以另一种方式(从百分比字符串到浮点数)?
  • @nocarrier 你可以这样做:double value = 1.0 - ( double.Parse(percentage.Replace("Percentage is ", "").Replace("%", "")) / 100.0);