[英]C# decimal format to display just the fraction part
我正在尋找String.Format
或ToString()
一個decimal
來得到小數部分。 '123.56m => "56"
.Substring
電話。CultureInfo.InvariantCulture
,否則每個用戶的語言/文化/區域設置將意味着可能使用不同的默認格式和小數點(小數點)字符,但使用CultureInfo.InvariantCulture
意味着小數點永遠是一個 ASCII 點'.'
字符。IFormatProvider
和ICustomFormatter
的方法,不幸的是Decimal.ToString(IFormatProvider)
需要provider
.GetFormat 返回NumberFormatInfo
值並且不支持使用ICustomFormatter
。
IFormatProvider
和ICustomFormatter
如果與String.Format
一起使用會起作用,但這不是您的問題。Math.Abs()
將負數轉換為正數(否則有一個前導符號字符會使-
調用站點復雜.Substring
)。".############################"
作為格式字符串對應於Decimal
值中的最大小數位數 (即 28 位數字)。
.
部分是必要的。fractionalPart
為0
時,則沒有要呈現的數字,並且.ToString( format: "#.########", provider: CultureInfo.InvariantCulture )
將返回""
(這將導致.Substring( startIndex: 1 )
拋出異常,所以我們可以用三元表達式跳過它)。Decimal dec = 123.45M;
Decimal fractionalPart = Math.Abs( dec - Decimal.Truncate( dec ) );
String formatted = fractionalPart.ToString( CultureInfo.InvariantCulture, ".############################" );
if( formatted.StartsWith( '.' ) ) formatted = formatted.Substring( startIndex: 1 );
Console.WriteLine( "{0} --> \"{1}\"", dec, formatted ); // "123.45 --> 45"
您可以將其簡化為 2 行:
Decimal fractionalPart = Math.Abs( value - Decimal.Truncate( value ) );
return ( fractionalPart == 0 ) ? String.Empty : fractionalPart.ToString( format: ".############################", provider: CultureInfo.InvariantCulture ).Substring( startIndex: 1 );
例子:
static String FmtOnlyFractional( Decimal value )
{
Decimal fractionalPart = Math.Abs( value - Decimal.Truncate( value ) );
return ( fractionalPart == 0 ) ? String.Empty : fractionalPart.ToString( format: ".############################", provider: CultureInfo.InvariantCulture ).Substring( startIndex: 1 );
}
FmtOnlyFractional( 0.0M ); => ""
FmtOnlyFractional( 1.0M ); => ""
FmtOnlyFractional( 1.1M ); => "1"
FmtOnlyFractional4( 1.0010000M ); => "001"
FmtOnlyFractional( 0.00000001M ); => "00000001"
FmtOnlyFractional( 123.00000001M ); => "00000001"
FmtOnlyFractional( -123.00000001M ); => "00000001"
FmtOnlyFractional( -0.00000001M ); => "00000001"
FmtOnlyFractional( -1.0000000M ); => ""
FmtOnlyFractional( -1.0000001M ); => "000001"
FmtOnlyFractional( -1.1000001M ); => "100001"
另一種方法假設你有最多 2 位數的分數
decimal value = 123.56m;
string result = (value % 1 * 100).ToString("F0"); //"56"
字符串Split()
方法
decimal value = 123.56m;
char separator = NumberFormatInfo.CurrentInfo.CurrencyDecimalSeparator.First();
string result = value.ToString("F2").Split(separator ).Last();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.