たとえば、空の文字列や「1.2」を含む文字列を取得して整数に変換する最良の方法は何ですか?もちろん、int.TryParse
は失敗します。私は、float.TryParse
を使用してからint
に変換したくありません。
Convert.ToDouble
(文化に依存)Convert.ToDouble
を使用できます。しかし、注意してください!以下の解決策は、現在のカルチャの設定の数字区切り文字がピリオド文字である場合にのみ機能します。
var a = (int)Convert.ToDouble("1.2");
Convert.ToDouble
(文化に依存しない)IFormatProvider
を使用し、現在のカルチャ設定から独立した方法で数値を変換することをお勧めします。
var a = (int)Convert.ToDouble("1.2", CultureInfo.InvariantCulture.NumberFormat);
このタスクを実行する別の方法は、解析された文字列でSplitを使用することです。
var a = int.Parse("1.2".Split('.')[0]);
または:
var a = int.Parse("1.2".Split('.').First());
IsNullOrEmpty
条件。NumberFormatInfo.NumberDecimalSeparator
プロパティを使用できます。Parse
、TryParse
、または Convert
クラスを賢く選択します。続きを読む:float
に解析してint
に変換することの何が問題になっているのかわかりません。他の方法がより効率的であるとは思えませんが、ここに試みがあります:
//allows empty strings and floating point values
int ParseInt(string s, bool alwaysRoundDown = false)
{
//converts null/empty strings to zero
if (string.IsNullOrEmpty(s)) return 0;
if (!s.Contains(".")) return int.Parse(s);
string parts = s.Split(".");
int i = int.Parse(parts[0]);
if (alwaysRoundDown || parts.Length==1) return i;
int digitAfterPoint = int.Parse(parts[1][0]);
return (digitAfterPoint < 5) ? i : i+1;
}
コードをグローバル化するには、"."
を System.Globalization.CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator
に置き換える必要があります。
たぶん、文字列関数を使用して浮動小数点の後のすべてを削除してから、intに変換することができます。しかし、真剣に私はそれがfloatに変換してからintに変換するよりも良いとは思いません。
int a = (int)Math.Round(float.Parse("0.9"));
0.9fを1ではなく0に変換する場合を除いて、最初に丸める必要があります。
Visual Basicランタイムライブラリを使用して、c#からこれを実行できます。
アセンブリMicrosoft.VisualBasic.dllへの参照をソリューションに追加する必要があります。
次に、次のコードで変換を行います。
using VB = Microsoft.VisualBasic.CompilerServices;
class Program
{
static void Main(string[] args)
{
int i = VB.Conversions.ToInteger("1.2");
}
}
私はこれと同じ問題を抱えていて、MarkとDariuszのハイブリッドを使用することになりました。
if (num == "")
{
num = "0.00";
}
var num1 = (float)Convert.ToDouble(num);
別の方法として、文字列を小数(。)を区切り文字として分割し、整数を解析する方法があると思います。もちろん、文字列に"37.56 miles in 32.65 seconds"
型の値のような値が含まれる可能性があるかどうかはまだ尋ねていません。
文字列には値(文字列または数値)が1つしかないことを考えると、次の行で何かを考えることができます。
public int64 GetInt64(string input)
{
if (string.IsNullOrEmpty(input)) return 0;
// Split string on decimal (.)
// ... This will separate all the digits.
//
string[] words = input.Split('.');
return int.Parse(words[0]);
}