89 lines
2.8 KiB
C#
89 lines
2.8 KiB
C#
using UnityEngine;
|
||
using System;
|
||
using System.Linq;
|
||
|
||
public static class IntExtensions {
|
||
|
||
public static int RandomPlusMinus(){
|
||
return UnityEngine.Random.Range(0, 2) * 2 - 1;
|
||
}
|
||
public static int RandomChooseRatio(params int[] ratioArray){
|
||
return RandomChooseRatio(new System.Random(), ratioArray);
|
||
}
|
||
public static int RandomChooseRatio(System.Random rand, params int[] ratioArray){
|
||
var totalRatio = ratioArray.Sum();
|
||
var value = rand.Next(1, totalRatio + 1);
|
||
var result = -1;
|
||
for(var i = 0; i < ratioArray.Length; ++i){
|
||
if(value <= ratioArray[i]){
|
||
result = i;
|
||
break;
|
||
}
|
||
value -= ratioArray[i];
|
||
}
|
||
return result;
|
||
}
|
||
|
||
public static int PickUp(this int value, int i){
|
||
switch(i){
|
||
case 0:
|
||
return 0;
|
||
case 1:
|
||
return value % 10;
|
||
default:
|
||
return (value / (int)Math.Pow(10, i - 1)) % 10;
|
||
}
|
||
}
|
||
|
||
public static string ToStringWithDigitCommas(this int value){
|
||
return string.Format("{0:#,0}", value);
|
||
}
|
||
|
||
public static string ToTimeString(this int value){
|
||
int minute = value / 60;
|
||
int second = value % 60;
|
||
return string.Format ("{0:D2}:{1:D2}", minute, second);
|
||
}
|
||
/// 負数未対応
|
||
public static string ToChineseNumerals(this int number){
|
||
return ((long)number).ToChineseNumerals();
|
||
}
|
||
public static string ToChineseNumerals(this long number){
|
||
if(number < 0) return number.ToString();
|
||
if(number == 0) return "〇";
|
||
|
||
string[] digit = new string[] { "", "一", "二", "三", "四", "五", "六", "七", "八", "九" };
|
||
string[] subUnit = new string[] { "", "十", "百", "千" };
|
||
string[] unit = new string[] { "", "万", "億", "兆", "京" };
|
||
string str = "";
|
||
int keta = 0;
|
||
while(number > 0){
|
||
int k = keta % 4;
|
||
int n = (int)(number % 10);
|
||
|
||
if(k == 0 && number % 10000 > 0){
|
||
str = unit[keta / 4] + str;
|
||
}
|
||
|
||
if(k != 0 && n == 1){
|
||
str = subUnit[k] + str;
|
||
}else if(n != 0){
|
||
str = digit[n] + subUnit[k] + str;
|
||
}
|
||
|
||
++keta;
|
||
number /= 10;
|
||
}
|
||
return str;
|
||
}
|
||
|
||
public static string ToMetricPrefix(this ulong value, int decimalPoint = 1){
|
||
string str = string.Format("{0:#,0}", value);
|
||
if(str.Length < 4) return str;
|
||
string result = str.Substring(0, str.IndexOf(',') + 2).Replace(',', '.');
|
||
string[] unit = new string[] { "", "k", "M", "G", "T", "P", "E", "Z", "Y" };
|
||
result = string.Format("{0}{1}", result, unit[Mathf.Min(str.Count(c => c == ','), unit.Length - 1)]);
|
||
return result;
|
||
}
|
||
}
|