[NSDecimalNumber]計算にNSDecimalNumberを使う
AppleScript サンプルコード
行番号 | ソース |
---|---|
001 | #!/usr/bin/env osascript |
002 | ----+----1----+----2----+-----3----+----4----+----5----+----6----+----7 |
003 | # |
004 | #com.cocolog-nifty.quicktimer.icefloe |
005 | ----+----1----+----2----+-----3----+----4----+----5----+----6----+----7 |
006 | use AppleScript version "2.8" |
007 | use framework "Foundation" |
008 | use framework "AppKit" |
009 | use scripting additions |
010 | |
011 | property refMe : a reference to current application |
012 | |
013 | |
014 | set the listRGB16bitColor to (choose color default color {50, 50, 50}) as list |
015 | |
016 | ###戻り値は16bitの整数をテキストに |
017 | set str16bitR to (item 1 of listRGB16bitColor) as text |
018 | set str16bitG to (item 2 of listRGB16bitColor) as text |
019 | set str16bitB to (item 3 of listRGB16bitColor) as text |
020 | ###NSDecimalNumberに変換 |
021 | set ocidDecR to refMe's NSDecimalNumber's alloc()'s initWithString:(str16bitR) |
022 | set ocidDecG to refMe's NSDecimalNumber's alloc()'s initWithString:(str16bitG) |
023 | set ocidDecB to refMe's NSDecimalNumber's alloc()'s initWithString:(str16bitB) |
024 | ###割り算 |
025 | set ocid16bit to refMe's NSDecimalNumber's alloc()'s initWithString:("65535") |
026 | |
027 | set ocidFloatR to (ocidDecR's decimalNumberByDividingBy:(ocid16bit)) |
028 | set ocidFloatG to (ocidDecG's decimalNumberByDividingBy:(ocid16bit)) |
029 | set ocidFloatB to (ocidDecB's decimalNumberByDividingBy:(ocid16bit)) |
030 | |
031 | log ocidFloatR's stringValue() as text |
032 | ###小数点4位まで |
033 | set ocidFormatter to refMe's NSNumberFormatter's alloc()'s init() |
034 | ocidFormatter's setRoundingMode:(refMe's NSNumberFormatterRoundFloor) |
035 | ocidFormatter's setNumberStyle:(refMe's NSNumberFormatterDecimalStyle) |
036 | ocidFormatter's setUsesGroupingSeparator:(false) |
037 | ocidFormatter's setMaximumFractionDigits:(10) |
038 | set ocidFloat4R to ocidFormatter's stringFromNumber:(ocidFloatR) |
039 | set ocidFloat4G to ocidFormatter's stringFromNumber:(ocidFloatG) |
040 | set ocidFloat4B to ocidFormatter's stringFromNumber:(ocidFloatB) |
041 | log ocidFloat4R as text |
042 | |
043 | ###掛け算 |
044 | set ocid8bit to refMe's NSDecimalNumber's alloc()'s initWithString:("255") |
045 | |
046 | set ocid8BitR to (ocidFloatR's decimalNumberByMultiplyingBy:(ocid8bit)) |
047 | set ocid8BitG to (ocidFloatG's decimalNumberByMultiplyingBy:(ocid8bit)) |
048 | set ocid8BitB to (ocidFloatB's decimalNumberByMultiplyingBy:(ocid8bit)) |
049 | |
050 | log ocid8BitR's stringValue() as text |
051 | ###小数点以下切り捨て |
052 | (* |
053 | NSNumberFormatterRoundCeiling |
054 | NSNumberFormatterRoundFloor |
055 | NSNumberFormatterRoundDown |
056 | NSNumberFormatterRoundUp |
057 | NSNumberFormatterRoundHalfEven |
058 | NSNumberFormatterRoundHalfDown |
059 | NSNumberFormatterRoundHalfUp |
060 | *) |
061 | #切り捨て |
062 | set ocidFormatter to refMe's NSNumberFormatter's alloc()'s init() |
063 | ocidFormatter's setRoundingMode:(refMe's NSNumberFormatterRoundUp) |
064 | ocidFormatter's setNumberStyle:(refMe's NSNumberFormatterDecimalStyle) |
065 | ocidFormatter's setUsesGroupingSeparator:(false) |
066 | ocidFormatter's setMaximumFractionDigits:(0) |
067 | set str8BitStrR to (ocidFormatter's stringFromNumber:(ocid8BitR)) as text |
068 | set str8BitStrG to (ocidFormatter's stringFromNumber:(ocid8BitG)) as text |
069 | set str8BitStrB to (ocidFormatter's stringFromNumber:(ocid8BitB)) as text |
070 | |
071 | |
072 | set strRhex to getHex(str8BitStrR) as text |
073 | set strGhex to getHex(str8BitStrG) as text |
074 | set strBhex to getHex(str8BitStrB) as text |
075 | |
076 | |
077 | #を付けてHTML用のHEXカラーコードに |
078 | set strHex to ("#" & strRhex & strGhex & strBhex) as text |
079 | set strRGBA to ("-color-rgba(" & str8BitStrR & ", " & str8BitStrG & ", " & str8BitStrB & ", " & 0 & ")") as text |
080 | |
081 | set strDisptext to (strHex & "\n" & strRGBA) as text |
082 | #RGBカラー値を整形 |
083 | set theRGB8bitColor to ("R:" & str8BitStrR & " G:" & str8BitStrG & " B:" & str8BitStrB & "\n" & strHex & "\n") |
084 | |
085 | ############################## |
086 | #####ダイアログを前面に |
087 | tell current application |
088 | set strName to name as text |
089 | end tell |
090 | ####スクリプトメニューから実行したら |
091 | if strName is "osascript" then |
092 | tell application "Finder" to activate |
093 | else |
094 | tell current application to activate |
095 | end if |
096 | |
097 | ###ダイアログ |
098 | set aliasIconPath to POSIX file "/System/Applications/Utilities/Digital Color Meter.app/Contents/Resources/AppIcon.icns" as alias |
099 | set strTitle to ("コードをコピーしてください") as text |
100 | set strMes to ("" & theRGB8bitColor & "Colorが\n出来ました\nコピーして使って下さい。") as text |
101 | set recordResult to (display dialog strMes default answer the strDisptext with icon aliasIconPath with title strTitle buttons {"クリップボードにコピー", "OK", "終了"} default button "OK" cancel button "終了" giving up after 20 without hidden answer) as record |
102 | ###クリップボードコピー |
103 | if button returned of recordResult is "クリップボードにコピー" then |
104 | try |
105 | set strText to text returned of recordResult as text |
106 | ####ペーストボード宣言 |
107 | set appPasteboard to refMe's NSPasteboard's generalPasteboard() |
108 | set ocidText to (refMe's NSString's stringWithString:(strText)) |
109 | appPasteboard's clearContents() |
110 | appPasteboard's setString:(ocidText) forType:(refMe's NSPasteboardTypeString) |
111 | on error |
112 | tell application "Finder" |
113 | set the clipboard to strTitle as text |
114 | end tell |
115 | end try |
116 | end if |
117 | |
118 | ############################## |
119 | #サブ |
120 | ############################## |
121 | to getHex(arg8BitNum) |
122 | set record8Bit2Hex to {|0|:"00", |1|:"01", |2|:"02", |3|:"03", |4|:"04", |5|:"05", |6|:"06", |7|:"07", |8|:"08", |9|:"09", |10|:"0A", |11|:"0B", |12|:"0C", |13|:"0D", |14|:"0E", |15|:"0F", |16|:"10", |17|:"11", |18|:"12", |19|:"13", |20|:"14", |21|:"15", |22|:"16", |23|:"17", |24|:"18", |25|:"19", |26|:"1A", |27|:"1B", |28|:"1C", |29|:"1D", |30|:"1E", |31|:"1F", |32|:"20", |33|:"21", |34|:"22", |35|:"23", |36|:"24", |37|:"25", |38|:"26", |39|:"27", |40|:"28", |41|:"29", |42|:"2A", |43|:"2B", |44|:"2C", |45|:"2D", |46|:"2E", |47|:"2F", |48|:"30", |49|:"31", |50|:"32", |51|:"33", |52|:"34", |53|:"35", |54|:"36", |55|:"37", |56|:"38", |57|:"39", |58|:"3A", |59|:"3B", |60|:"3C", |61|:"3D", |62|:"3E", |63|:"3F", |64|:"40", |65|:"41", |66|:"42", |67|:"43", |68|:"44", |69|:"45", |70|:"46", |71|:"47", |72|:"48", |73|:"49", |74|:"4A", |75|:"4B", |76|:"4C", |77|:"4D", |78|:"4E", |79|:"4F", |80|:"50", |81|:"51", |82|:"52", |83|:"53", |84|:"54", |85|:"55", |86|:"56", |87|:"57", |88|:"58", |89|:"59", |90|:"5A", |91|:"5B", |92|:"5C", |93|:"5D", |94|:"5E", |95|:"5F", |96|:"60", |97|:"61", |98|:"62", |99|:"63", |100|:"64", |101|:"65", |102|:"66", |103|:"67", |104|:"68", |105|:"69", |106|:"6A", |107|:"6B", |108|:"6C", |109|:"6D", |110|:"6E", |111|:"6F", |112|:"70", |113|:"71", |114|:"72", |115|:"73", |116|:"74", |117|:"75", |118|:"76", |119|:"77", |120|:"78", |121|:"79", |122|:"7A", |123|:"7B", |124|:"7C", |125|:"7D", |126|:"7E", |127|:"7F", |128|:"80", |129|:"81", |130|:"82", |131|:"83", |132|:"84", |133|:"85", |134|:"86", |135|:"87", |136|:"88", |137|:"89", |138|:"8A", |139|:"8B", |140|:"8C", |141|:"8D", |142|:"8E", |143|:"8F", |144|:"90", |145|:"91", |146|:"92", |147|:"93", |148|:"94", |149|:"95", |150|:"96", |151|:"97", |152|:"98", |153|:"99", |154|:"9A", |155|:"9B", |156|:"9C", |157|:"9D", |158|:"9E", |159|:"9F", |160|:"A0", |161|:"A1", |162|:"A2", |163|:"A3", |164|:"A4", |165|:"A5", |166|:"A6", |167|:"A7", |168|:"A8", |169|:"A9", |170|:"AA", |171|:"AB", |172|:"AC", |173|:"AD", |174|:"AE", |175|:"AF", |176|:"B0", |177|:"B1", |178|:"B2", |179|:"B3", |180|:"B4", |181|:"B5", |182|:"B6", |183|:"B7", |184|:"B8", |185|:"B9", |186|:"BA", |187|:"BB", |188|:"BC", |189|:"BD", |190|:"BE", |191|:"BF", |192|:"C0", |193|:"C1", |194|:"C2", |195|:"C3", |196|:"C4", |197|:"C5", |198|:"C6", |199|:"C7", |200|:"C8", |201|:"C9", |202|:"CA", |203|:"CB", |204|:"CC", |205|:"CD", |206|:"CE", |207|:"CF", |208|:"D0", |209|:"D1", |210|:"D2", |211|:"D3", |212|:"D4", |213|:"D5", |214|:"D6", |215|:"D7", |216|:"D8", |217|:"D9", |218|:"DA", |219|:"DB", |220|:"DC", |221|:"DD", |222|:"DE", |223|:"DF", |224|:"E0", |225|:"E1", |226|:"E2", |227|:"E3", |228|:"E4", |229|:"E5", |230|:"E6", |231|:"E7", |232|:"E8", |233|:"E9", |234|:"EA", |235|:"EB", |236|:"EC", |237|:"ED", |238|:"EE", |239|:"EF", |240|:"F0", |241|:"F1", |242|:"F2", |243|:"F3", |244|:"F4", |245|:"F5", |246|:"F6", |247|:"F7", |248|:"F8", |249|:"F9", |250|:"FA", |251|:"FB", |252|:"FC", |253|:"FD", |254|:"FE", |255|:"FF"} as record |
123 | |
124 | set ocid8Bit2HexDict to refMe's NSMutableDictionary's alloc()'s initWithCapacity:0 |
125 | ocid8Bit2HexDict's setDictionary:(record8Bit2Hex) |
126 | set str8BitNum to arg8BitNum as string |
127 | set ocidValue to (ocid8Bit2HexDict's valueForKey:(str8BitNum)) |
128 | set strValue to ocidValue as text |
129 | return strValue |
130 | end getHex |
AppleScriptで生成しました |
| 固定リンク
« PDFドキュメントのフォームフィールドの情報の収集 | トップページ | [inetloc] inetlocのURLがBASE64エンコードされたデータの場合の取り出し方(HTMLにしちゃう版) »
「NSNumber」カテゴリの記事
- NSNumberのValueの考え方(2024.09.03)
- [AppleScript]負の数値を整数にする(2024.09.02)
- [NSDecimalNumber]計算にNSDecimalNumberを使う(2024.03.26)
- [小数点]小数点いかの桁揃え(2023.11.13)
- [integerValue]as integerを使わない場合(2023.01.12)