"インテリジェント"キャストのダブル二つの異なる形式の文字列?
-
06-07-2019 - |
質問
仕事をしているデータベースの制限の (numeric)とみなすデータ型 できる店 ダブル.いきたいと思いがあなたを迎えのある列およびこれをHTTP要求.この問題を中心と私は知ることはできない場合はこの番号をすべきで何をすべきではないのである.
例えば、ダブルはIDバージョンアップされたどのようなフォーマットは一切のサイトを取得するには HTTPリクエスト がかなりの混乱をきたしている。の観点から、以下の例:
site.com/showid.php?id=12300000 // OK
site.com/showid.php?id=1.23E7 // Bad; scientific notation
site.com/showid.php?id=12300000.0 // Bad; trailing decimal
のこう キャストで長い.無理に問題のあふれるので、解決の科学表記法で、ろに、末尾類ではありません。この受け入れ可能な解決策であれば、コードの思想定したIdました。どの場合、例えば、私たクエリ、サイトマップの番号を座標 の部で"年"、小数部で"非常に重要であるということですか。 その後、キャスト長はだめなのです。
短;
- の場合はダブルには十進数、添加しないようにして下さい、末尾類ではありません。
- この部で"年"、小数部で"、かわいらしさがひとしおである。
- ない場合はすべて科学表記法または千分離機。
このソリューションは移植する両方のC#、Javaでお受けいたしますので、回答の両方の言語である。(Oh、アコ質問は、お気軽に名前を変更で買うことができますか良くなっていると思いますよ。)
解決 6
ニ私自身の結論
- チェックの場合はダブルである.
- によっては、形式の文字列です。
その後も重要であり、を指定せずに、不変式の文はカンマで区切るには-部で"年"、小数部で"場合は、","ではなく"."でイマイチ好きによるHTTPます。もちろん、この問題のみ作物の場合は、OSに設定されているロケールを好みの[ドメイン]を選択します
public static string DoubleToStringFormat(double dval) { long lval = (long)dval; if ((double)lval == dval) { // has no decimals: format as integer return dval.ToString("#.", CultureInfo.InvariantCulture); } else { // has decimals: keep them all return dval.ToString("0.##################", CultureInfo.InvariantCulture); } }
他のヒント
を補完する回答のgustafc者勝ちらから1分)、"わらびもち"をここで、該当のコードラインのためのC#:
MyDouble.ToString("0.################")
または
string.Format("{0:0.################}", MyDouble);
ですので安全なフォーマットの値と末尾のゼロの場合は数かどうかを表すIDまたは座標)、なぜならずティの論理について説明していただけまに弾拠点を教えてください。例えばファイルのメンテナンスが容易にするJava):
// Could also use Math.Floor, etc., to determine if it is integral
long integralPart = (long)doubleValue;
if ((double)integralPart == doubleValue)
{
// has no decimals: format it as an integer e.g. integralPart.ToString("D") in C#
}
else
{
// has decimals: keep them all e.g. doubleValue.ToString("F17")
}
かつ包のカスタムタイプ?
public class IntelligentNumber
{
private readonly double number;
public IntelligentNumber(double number)
{
this.number = number;
}
public override string ToString()
{
long integralPart = (long)this.number;
if((double)integralPart == this.number)
{
return integralPart.ToString();
}
else
{
return this.number.ToString();
}
}
}
参照Vilx-回答のために、より実用的なアルゴリズムの一つです。
かどうか確認num==round(num)
Javaでは、これを実行する事ができます。付 は、decimalformat.
static String format(double n) {
return new DecimalFormat("0.###########################").format(n);
}
の #
プレースホルダを思表示さない限り、番号以外のものを頭に入れてあり、小数点な表示がない限り、もれないことになっています。