将浮点数转换为百分比并使用奇怪的SQL格式化

4

我有一个SQL表格,其中一列的数据类型是浮点型。有一个外部应用程序会将百分比值写入该列,我会读取这些值并在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#中有关格式化、四舍五入和转换百分比的文章:

将百分比转换为最接近的分数C#中的百分比计算http://www.dotnetperls.com/percentage

但是我找不到任何数学计算或内置的c#转换可以给我需要的输出结果。

似乎我需要做的是让0.96的数字减去某个数字,然后再将其乘以100,但0.5始终会使我的数学计算出错...

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

更新

这是我最终使用的解决方案,非常好用!(感谢Reed)

            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+

在 C# 中处理百分比
格式化小数以显示百分比值?
将百分比转换为最接近的分数
http://www.dotnetperls.com/percentage
.NET:小数转换为四舍五入的字符串
C# 是否有内置函数将格式化的字符串转换回数字?

A-

将小数格式化为带有特定小数位数的百分比
将小数转换为百分比或移动小数点。如何操作?
如何将百分比字符串转换为双精度浮点数?

B+

两种显示小数的方式
http://msdn.microsoft.com/en-us/library/dwhawy9k.aspx


3
将“1-0.95=0.05”进行翻译,然后将“0.05*100=5”计算出结果,并将其转化为字符串格式,最后在末尾加上百分号“%”。 - T I
3个回答

5

我相信您想要:

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");

感谢您的快速回复,里德。我认为我读过的一半数学文章都是由您回答的!我现在将尝试这个解决方案。 - Shawn J. Molloy
Copsey先生,您是开发者中的神话。这个程序运行得非常好!再次感谢您的回答 - 我已经更新了我的问题,并附上了测试代码,证明这确实完美无缺。 - Shawn J. Molloy
一个奖励问题 - 我们如何修改这段代码以实现相反的功能(从百分比字符串转换为浮点数)? - Shawn J. Molloy
2
@nocarrier 你可以这样做:double value = 1.0 - ( double.Parse(percentage.Replace("Percentage is ", "").Replace("%", "")) / 100.0); - Reed Copsey

3

尝试:

(1 - currentPercentage) * 100

例子:

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

格式化:

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

最好的一个是由 @Reed 提出的建议。

为什么要乘以100?在.NET中的字符串格式化已经可以正确处理百分比值了... - Reed Copsey
为什么不呢?我一开始是从数学的角度来考虑的,忘记了 .NET 的格式化潜力 :-)。无论如何,这是正确的。 - mipe34
我投了你一票 - 只是想指出在.NET中你不需要这样做,特别是如果最终目标只是格式化。(如果不这样做,它也更容易本地化) - Reed Copsey

2

将百分数减去一(1),然后乘以100。 1-.5 = .5 = 50%。 1-.95 = .05 = 5%


谢谢Beth - 你的数学计算是正确的,但是@Reed比你更快地提供了一个很棒的代码示例。感谢你的努力,点个赞。 - Shawn J. Molloy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接