我正在尋找String.Format或只獲得分數部分
ToString()。decimal'123.56m => "56"
uj5u.com熱心網友回復:
- 不幸的是,只有小數部分沒有任何數字自定義格式說明符,但如果你先做一些算術,你可以提取它然后格式化它......
- ...你也需要一個
.Substring電話。
- ...你也需要一個
- 此外,請務必使用
CultureInfo.InvariantCulture,否則每個用戶的語言/文化/區域設定可能意味著不同的默認格式和小數點(小數點)字符將被使用,但使用CultureInfo.InvariantCulture意味著小數點將始終是 ASCII 點'.'字符。 - 我確實嘗試了一種使用
IFormatProviderand的方法ICustomFormatter,不幸的是Decimal.ToString(IFormatProvider)需要provider.GetFormat 來回傳一個NumberFormatInfo值并且不支持使用ICustomFormatter.- 雖然
IFormatProvider并且ICustomFormatter如果與 一起使用 將起作用String.Format,但這不是你的問題。
- 雖然
- 用于將
Math.Abs()負數轉換為正數(否則會有一個前導-符號 char 會使.Substring呼叫站點復雜化)。 - 用作
".############################"格式字串對應于值中的最大小數位數Decimal(即 28 位)。- 前導
.部分是必要的。
- 前導
- 當
fractionalPartis時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"
uj5u.com熱心網友回復:
另一種方法假設您最多有 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();
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/512535.html
標籤:C#字符串格式
上一篇:從JWT令牌獲取宣告、權限和角色
