.NET中是否有一种简单的方法来获取数字的" st"," nd"," rd"和" th"结尾?
时间:2020-03-05 18:55:06 来源:igfitidea点击:
我想知道.NET中是否缺少转换以下内容的方法或者格式字符串:
1 to 1st 2 to 2nd 3 to 3rd 4 to 4th 11 to 11th 101 to 101st 111 to 111th
该链接提供了编写自己的函数所涉及的基本原理的错误示例,但是如果我缺少内置功能,我会更加好奇。
解决方案
Scott Hanselman的答案是被接受的,因为它直接回答了问题。
但是,对于解决方案,请参见此好答案。
解决方案
回答
不,.NET基类库中没有内置功能。
回答
这个功能比我们想象的要简单得多。尽管为此可能已经存在一个.NET函数,但是以下函数(用PHP编写)可以完成此工作。移植起来应该不难。
function ordinal($num) { $ones = $num % 10; $tens = floor($num / 10) % 10; if ($tens == 1) { $suff = "th"; } else { switch ($ones) { case 1 : $suff = "st"; break; case 2 : $suff = "nd"; break; case 3 : $suff = "rd"; break; default : $suff = "th"; } } return $num . $suff; }
回答
已经讨论过了,但是我不确定如何链接到它。这是代码片段:
public static string Ordinal(this int number) { var ones = number % 10; var tens = Math.Floor (number / 10f) % 10; if (tens == 1) { return number + "th"; } switch (ones) { case 1: return number + "st"; case 2: return number + "nd"; case 3: return number + "rd"; default: return number + "th"; } }
仅供参考:这是一种扩展方法。如果.NET版本低于3.5,则删除此关键字
[编辑]:感谢我们指出这是不正确的,这就是复制/粘贴代码得到的结果:)
回答
我认为很难获得序数后缀...我们基本上必须编写一个函数,该函数使用开关来测试数字并添加后缀。
语言没有理由在内部提供此功能,尤其是在特定于区域设置的情况下。
在编写代码量方面,我们可以比该链接做得更好,但是我们必须为此编写一个函数...
回答
@nickf:这是C#中的PHP函数:
public static string Ordinal(int number) { string suffix = String.Empty; int ones = number % 10; int tens = (int)Math.Floor(number / 10M) % 10; if (tens == 1) { suffix = "th"; } else { switch (ones) { case 1: suffix = "st"; break; case 2: suffix = "nd"; break; case 3: suffix = "rd"; break; default: suffix = "th"; break; } } return String.Format("{0}{1}", number, suffix); }
回答
else if (choice=='q') { qtr++; switch (qtr) { case(2): strcpy(qtrs,"nd");break; case(3): { strcpy(qtrs,"rd"); cout<<"End of First Half!!!"; cout<<" hteam "<<"["<<hteam<<"] "<<hs; cout<<" vteam "<<" ["<<vteam; cout<<"] "; cout<<vs;dwn=1;yd=10; if (beginp=='H') team='V'; else team='H'; break; } case(4): strcpy(qtrs,"th");break;
回答
这是Microsoft SQL Server Function版本:
CREATE FUNCTION [Internal].[GetNumberAsOrdinalString] ( @num int ) RETURNS nvarchar(max) AS BEGIN DECLARE @Suffix nvarchar(2); DECLARE @Ones int; DECLARE @Tens int; SET @Ones = @num % 10; SET @Tens = FLOOR(@num / 10) % 10; IF @Tens = 1 BEGIN SET @Suffix = 'th'; END ELSE BEGIN SET @Suffix = CASE @Ones WHEN 1 THEN 'st' WHEN 2 THEN 'nd' WHEN 3 THEN 'rd' ELSE 'th' END END RETURN CONVERT(nvarchar(max), @num) + @Suffix; END